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

将字符串转换为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条)

报告相同问题?