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

Go相关问答推荐

你能帮我优化一个golang代码关于函数CrossPointTwoRect

在不耗尽资源的情况下处理S3文件下载

为什么没有正确生成这些元组?

如何确定泛型类型在运行时是否可比较?

从带有嵌套括号的字符串中提取值

如何为循环扫描的bufio scanner 设置超时?

是否需要手动调用rand.Seed?

使用 OpenTelemetry 统一不同服务的范围

有没有办法在 Golang 中使用带有 go-simple-mail lib 的代理?

Go 中的 Azure JWT 验证不起作用

Go:如何在将 float64 转换为 float32 时判断精度损失

致命错误:找不到由 zergon321/reisen 引起的libavcodec/avcodec.h文件

Golang Gin 绑定请求正文 XML 到 Slice

为什么当我忽略 template.New() 程序可以成功运行?

级联调用泛型函数时的泛型类型推断

跟踪长时间运行的任务的进度 - 正确的方法

Grafana/Prometheus 将多个 ip 可视化为查询

不理解切片和指针

如何断言类型是指向golang中接口的指针

为什么 Go 不允许将一个泛型分配给另一个泛型?