Go Lang - 将十六进制转换为ASCII
问题描述:
我正在写一个转换程序将十六进制转换为int,binary和ascii。 int和二进制工作正常,但ascii导致问题。如果输入的文本短于2个字符,它可以正常工作,但是更长的时间会导致出现格式错误的文本。我的代码如下:Go Lang - 将十六进制转换为ASCII
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))
}
输出为 “样本”,你可以看到on the playground。
+1
完美的作品,谢谢! – mk444
请记住,ASCII有一个“可打印的字符”,即一些值可能没有图形代表性的contistept。 – ain