dpf25323 2019-05-27 12:28
浏览 975
已采纳

将字符串转换为uint16

I'm new at go and I've been trying to cast the string "0x0000" into a hexadecimal with no luck so far. Here's what I tried:

import "strconv"

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

which throws the error: strconv.ParseUint: parsing "0x0000": invalid syntax.

I've also tried uint16("0x0000") but apparently I also can't convert a string directly to uint16. I'm sure it's very trivial, so any help would be appreciated. Thanks.

  • 写回答

2条回答 默认 最新

  • dongshenyu4638 2019-05-27 12:40
    关注

    The behavior of strconv.ParseUint() is detailed at strconv.ParseInt():

    If base == 0, the base is implied by the string's prefix: base 16 for "0x", base 8 for "0", and base 10 otherwise. For bases 1, below 0 or above 36 an error is returned.

    So simply use base = 0, and then the 0x prefix will be interpreted properly.

    For example:

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

    Output (try it on the Go Playground):

    0 <nil>
    256 <nil>
    

    Another option is to use 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)
    

    Output is the same. Try it on the Go Playground.

    Also see related question: Convert string to integer type in Go?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多