登录
首页 >  Golang >  Go问答

将字符串转换为16位无符号整数

来源:stackoverflow

时间:2024-03-07 15:36:27 120浏览 收藏

今天golang学习网给大家带来了《将字符串转换为16位无符号整数》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我是围棋新手,我一直在尝试将字符串“0x0000”转换为十六进制,但到目前为止还没有成功。这是我尝试过的:

import "strconv"

c, err := strconv.ParseUint("0x0000", 16, 32)
if err != nil {
    return err, nil
}

抛出错误:strconv.parseuint:解析“0x0000”:无效语法

我也尝试过 uint16("0x0000") 但显然我也无法将字符串直接转换为 uint16。我确信这非常微不足道,因此任何帮助将不胜感激。谢谢。


解决方案


strconv.ParseUint() 的行为详见 strconv.ParseInt()

如果基数 == 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 
256 

另一种选择是使用 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?

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

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

  1. 删除“0x”前缀:

    c, err := strconv.parseuint("0000", 16, 32)
  2. 让 strconv 检测带有前缀的基数,如 documented

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

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

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

本篇关于《将字符串转换为16位无符号整数》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>