我是新来的,我一直在尝试将字符串“0x0000”转换为十六进制,但到目前为止还没有成功。这是我尝试过的:import "strconv"c, err := strconv.ParseUint("0x0000", 16, 32)if err != nil { return err, nil}抛出错误:strconv.ParseUint: parsing "0x0000": invalid syntax。我也尝试过uint16("0x0000"),但显然我也无法将字符串直接转换为uint16. 我敢肯定这是非常微不足道的,所以任何帮助将不胜感激。谢谢。
2 回答
梦里花落0921
TA贡献1772条经验 获得超5个赞
行为strconv.ParseUint()
详见strconv.ParseInt()
:
如果 base == 0,则基数由字符串的前缀隐含:基数 16 代表“0x”,基数 8 代表“0”,否则基数 10。对于基数 1、低于 0 或高于 36,将返回错误。
所以只需使用base = 0
, 然后0x
前缀就会被正确解释。
例如:
c, err := strconv.ParseUint("0x0000", 0, 16)
fmt.Println(c, err)
c, err = strconv.ParseUint("0x0100", 0, 16)
fmt.Println(c, err)
输出(在Go Playground上尝试):
0 <nil> 256 <nil>
另一种选择是使用fmt.Sscanf()
:
var c uint16 _, err := fmt.Sscanf("0x0000", "0x%04x", &c) fmt.Println(c, err) _, err = fmt.Sscanf("0x0100", "0x%04x", &c) fmt.Println(c, err)
输出是一样的。在Go Playground上尝试一下。
白衣染霜花
TA贡献1796条经验 获得超10个赞
首先,您正在做的是转换,而不是类型转换。Go 根本不支持类型转换,即使支持,这也不是任何语言中类型转换的例子。
但是对于您的实际问题,您有两种选择:
删除“0x”前缀:
c, err := strconv.ParseUint("0000", 16, 32)
让 strconv 检测带有前缀的碱基,如记录的那样:
如果 base == 0,则基数由字符串的前缀隐含:基数 16 代表“0x”,基数 8 代表“0”,否则基数 10。对于基数 1、低于 0 或高于 36,将返回错误。
c, err := strconv.ParseUint("0x0000", 0, 32)
最后,如果您的目标是转换为 a uint16
,您可能应该通过请求适当的位大小来告诉 ParseUint:
c, err := strconv.ParseUint("0x0000", 0, 16)
- 2 回答
- 0 关注
- 204 浏览
添加回答
举报
0/150
提交
取消