在 Go 中将 Hex 转换为带符号的 Int

Converting Hex to signed Int in Go

我想在 Go 中将十六进制字符串转换为带符号的整数值。我的输入值为“FF60”,我希望输出为“-160”。当我使用下面的函数时,结果是“65376”,代表无符号表示。

value, err := strconv.ParseInt("FF60", 16, 64)

我本以为使用 ParseUInt 函数时的结果是 65376。 非常感谢任何帮助。

strconv.ParseInt()的第三个参数告诉你要解析的整数的bitsize。 0xff60解析为64位整数确实是65376.

您实际上想将其解析为 16 位整数,因此将 16 作为位大小传递。这样做你会得到一个错误:

strconv.ParseInt: parsing "FF60": value out of range

正确:0xFF60(即65376)在int16的有效范围之外(有效的int16范围是[-32768..32767]) .

所以你可以做的是使用 strconv.ParseUint() 将其解析为无符号的 16 位整数,然后将结果转换为有符号的 16 位整数:

value, err := strconv.ParseUint("FF60", 16, 16)
fmt.Println(value, err)
fmt.Println(int16(value))

这将输出(在 Go Playground 上尝试):

65376 <nil>
-160