我正在编写一个go程序,将hex转换为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
我已经进行了大量的搜索,并且已经看过一些关于符文的文档'但我不确定这是如何运作的。是否有可用于实现此目的的内置十六进制编码/解码库?
答案 0 :(得分:13)
标准库中有一个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))
}
输出为"示例",您可以看到on the playground。