Sal*_*aFG -1 string hex casting go
我是新手,我一直在尝试将字符串“ 0x0000”转换为十六进制,到目前为止没有任何运气。这是我尝试过的:
import "strconv"
c, err := strconv.ParseUint("0x0000", 16, 32)
if err != nil {
return err, nil
}
Run Code Online (Sandbox Code Playgroud)
引发错误:strconv.ParseUint: parsing "0x0000": invalid syntax。
我也尝试过,uint16("0x0000")但显然我也无法将字符串直接转换为uint16。我敢肯定这是微不足道的,所以我们将不胜感激。谢谢。
的行为在以下位置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)
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上尝试):
0 <nil>
256 <nil>
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用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)
Run Code Online (Sandbox Code Playgroud)
输出是相同的。在Go Playground上尝试一下。
另请参阅相关问题:在Go中将字符串转换为整数类型?