我想在Go中将十六进制字符串转换为有符号整数值.我的输入值是"FF60",我希望输出值是"-160".当我使用下面的函数时,结果是"65376",它表示无符号表示.
value, err := strconv.ParseInt("FF60", 16, 64)
在使用ParseUInt函数时,我本可以预期65376的结果.
我想在Go中将十六进制字符串转换为有符号整数值.我的输入值是"FF60",我希望输出值是"-160".当我使用下面的函数时,结果是"65376",它表示无符号表示.
value, err := strconv.ParseInt("FF60", 16, 64)
在使用ParseUInt函数时,我本可以预期65376的结果.
第三个参数strconv.ParseInt()
表示要解析的整数的位大小.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上try ):
65376 <nil>
-160