将字串转换为uint16

时间:2019-05-27 12:28:10

标签: string go casting hex

我是新手,我一直在尝试将字符串“ 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 个答案:

答案 0 :(得分:6)

strconv.ParseUint()的行为在strconv.ParseInt()中有详细说明:

  

如果base == 0,则字符串的前缀隐含基数:“ 0x”的基数为16,“ 0”的基数为8,否则为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上尝试一下。

另请参阅相关问题:Convert string to integer type in Go?

答案 1 :(得分:2)

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

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

  1. 删除“ 0x”前缀:

    c, err := strconv.ParseUint("0000", 16, 32)
    
  2. 让strconv使用前缀documented来检测碱基:

      

    如果base == 0,则字符串的前缀隐含基数:“ 0x”的基数为16,“ 0”的基数为8,否则为10。对于基数1,小于0或大于36的错误,将返回。

    c, err := strconv.ParseUint("0x0000", 0, 32)
    

最后,如果您的目标是转换为uint16,则应该通过请求适当的位大小来告诉ParseUint:

c, err := strconv.ParseUint("0x0000", 0, 16)