将字符串转换为 uint16

我是新来的,我一直在尝试将字符串“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. 我敢肯定这是非常微不足道的,所以任何帮助将不胜感激。谢谢。


桃花长相依
浏览 233回答 2
2回答

梦里花落0921

行为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上尝试一下。

白衣染霜花

首先,您正在做的是转换,而不是类型转换。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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go