如何将十六进制转换为 ASCII

2024-02-20

我正在编写一个 go 程序将十六进制转换为 int、二进制和 ascii。 int 和二进制工作正常,但 ascii 引起了问题。如果输入文本短于 2 个字符,则可以正常工作,但任何更长的字符都会导致出现格式错误的文本。我的代码如下:

package main

import "fmt"
import "strconv"

func main() {

    // get input as string
    fmt.Print("Enter hex to convert: ")
    var input_hex string = ""
    fmt.Scanln(&input_hex)

    // convert hex to int and print outputs
    if i, err := strconv.ParseInt(input_hex, 16, 0); err != nil {
        fmt.Println(err)
    } else {
        // int
        fmt.Print("Integer = ")
        fmt.Println(i)
        // ascii
        fmt.Print("Ascii = ")
        fmt.Printf("%c", i)
        fmt.Println("")
        // bin
        fmt.Print("Binary = ")
        fmt.Printf("%b", i)
        fmt.Println("\n")
    }

}

输入十六进制'时的一些输出示例73616d706c65':

Enter hex to convert: 73616d706c65
Integer = 126862285106277
Ascii = �
Binary = 11100110110000101101101011100000110110001100101

我已经进行了大量搜索并看到了一些有关“符文”的文档,但我不确定这是如何工作的。是否有内置的十六进制编码/解码库可用于完成此任务?


有一个hex封装在标准库中,可以将十六进制解码为字节。如果它是有效的 utf-8(所有 ASCII 都是如此),则可以将其显示为字符串。

这是在行动中:

package main

import (
    "encoding/hex"
    "fmt"
)

func main() {
    a := "73616d706c65"
    bs, err := hex.DecodeString(a)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(bs))
}

输出是“sample”,你可以看到在操场上 https://play.golang.org/p/8CuZ5oYHUR.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将十六进制转换为 ASCII 的相关文章

随机推荐