严格将字符串转换为int

时间:2019-06-06 12:09:46

标签: string go hex

我正在尝试将十六进制字符串值存储到: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 ...

1 个答案:

答案 0 :(得分:1)

您需要使用strconv.ParseUint

d, err := strconv.ParseUint("0x3958ABBFEC23BD40", 0, 64)
if err != nil {
    panic(err)
}
fmt.Printf("%d\n", d)

您可以在Go Playground上试用此代码。