我正在编写一个go程序,将十六进制转换为int,binary和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都是有效的),则可以将其显示为字符串。
hex
它在起作用:
package main import ( "encoding/hex" "fmt" ) func main() { a := "73616d706c65" bs, err := hex.DecodeString(a) if err != nil { panic(err) } fmt.Println(string(bs)) }
输出为“样本”,您可以在操场上看到它。