我正在尝试将十六进制字符串值存储到:uint64,例如:“ 3958ABBFEC23BD40”:
fmt.Println(myuint64)
$ 0x3958ABBFEC23BD40
我尝试使用编码/十六进制,或将strconv转换为int等,...找不到任何解决方案。
file, err := os.Open("myfile")
if err != nil {
fmt.Println("erreur",err)
}
b := bufio.NewReader(file)
a,_ := b.Peek(16)
d, err := strconv.ParseUint(string(a), 0, 64)
if err != nil {
panic(err)
}
fmt.Printf("%d\n%s\n", d,string(a))
显然我没有得到预期的结果:
$ 4132241498901298496
fcb9ca7c63ec7c5d
预期:
$ 0xfcb9ca7c63ec7c5d
使用以下代码,我已经获得了很好的uint,但是除非使用strconv,否则我无法将其转换为hexa,但是我不希望使用字符串。
v := *(*[8]byte)(unsafe.Pointer(&d))
var final []byte = v[:]
var n uint64
buf := bytes.NewBuffer(final)
binary.Read(buf, binary.LittleEndian, &n)
fmt.Println(strconv.FormatUint(n, 16))
结果:$ fcb9ca7c63ec7c5d
但作为字符串,并且预期为$ fcb9ca7c63ec7c5d
类型的uint64 ...
答案 0 :(得分:1)
您需要使用strconv.ParseUint。
d, err := strconv.ParseUint("0x3958ABBFEC23BD40", 0, 64)
if err != nil {
panic(err)
}
fmt.Printf("%d\n", d)
您可以在Go Playground上试用此代码。