string - 严格将字符串转换为 int

标签 string go hex

<分区>

我正在尝试存储一个十六进制字符串值:ex "3958ABBFEC23BD40"到 uint64,就像这样:

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,但我不想使用字符串。

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...

最佳答案

您需要使用 strconv.ParseUint .

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

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

关于string - 严格将字符串转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477331/

相关文章:

c++ - 在 C++ 中将字节字符串转换为普通字符串

python - 如何在 Python 3.2 中选择输入

go - 您如何在Go中使用base64编码编码(marshal)处理的数据?

c - 戈朗 : How to correctly parse UTF-8 string from C

javascript - 如何将颜色 'Clear'设置为RGB或HEX?

c# - 将十进制(用户字符串)转换为带有 0x 前缀的十六进制

java - 如何以nt的形式表示字符串,其中t是重复n次的子字符串?

java - 规范化字符串以在 Java 中创建安全的 URL

go - 您将 Go 用于 Web 服务的 Web 服务器是什么?

java - 如何从 BluetoothChat 中的输入/输出流读取/写入原始十六进制字节?