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

将字符串转换为 uint16

将字符串转换为 uint16

Go
桃花长相依 2023-06-19 17:06:03
我是新来的,我一直在尝试将字符串“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上尝试一下。

查看完整回答
反对 回复 2023-06-19
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

首先,您正在做的是转换,而不是类型转换。Go 根本不支持类型转换,即使支持,这也不是任何语言中类型转换的例子。

但是对于您的实际问题,您有两种选择:

  1. 删除“0x”前缀:

    c, err := strconv.ParseUint("0000", 16, 32)
  2. 让 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)


查看完整回答
反对 回复 2023-06-19
  • 2 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

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