在 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
我想在 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