我想在 Go 中将十六进制字符串转换为带符号的整数值。我的输入值为“FF60”,我希望输出为“-160”。当我使用下面的函数时,结果是“65376”,代表无符号表示。value, err := strconv.ParseInt("FF60", 16, 64)使用 ParseUInt 函数时,我会期望 65376 的结果。任何帮助将非常感激。
1 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
第三个参数strconv.ParseInt()
告诉你要解析的整数的位大小。0xff60
解析为 64 位整数确实是65376
.
您实际上想将其解析为 16 位整数,因此16
作为位大小传递。这样做你会得到一个错误:
strconv.ParseInt: parsing "FF60": value out of range
正确的是:0xFF60
(which is 65376
) 超出了int16
(valid int16
range is [-32768..32767]
) 的有效范围。
因此,您可以使用 将其解析为无符号 16 位整数strconv.ParseUint()
,然后将结果转换为带符号的 16 位整数:
value, err := strconv.ParseUint("FF60", 16, 16) fmt.Println(value, err) fmt.Println(int16(value))
这将输出(在Go Playground上尝试):
65376 <nil> -160
- 1 回答
- 0 关注
- 233 浏览
添加回答
举报
0/150
提交
取消