为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
白板的微信 2022-12-13 10:53:45
我想在 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 int16range 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


查看完整回答
反对 回复 2022-12-13
  • 1 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信