3

尝试将 8 位二进制字符串转为字节(无符号)

strconv.ParseInt("11111000", 2, 8)

返回 127

strconv.ParseInt("11111000", 2, 16)

返回正确的数字 248

根据ParseInt文档,8 代表 int8,从 -128 到 127。如果是这样,为什么返回值不是负数?

4

2 回答 2

3

您解析正符号整数,负符号整数以减号为前缀。对于无符号整数,解析为无符号。此外,始终检查错误。

例如,

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // +127
    i, err := strconv.ParseInt("01111111", 2, 8)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(i)
    // -128
    i, err = strconv.ParseInt("-10000000", 2, 8)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(i)
    // +248 out of range for int8
    i, err = strconv.ParseInt("11111000", 2, 8)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(i)
    // unsigned 248 in range for uint8 (byte)
    u, err := strconv.ParseUint("11111000", 2, 8)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(u)
}

输出:

127
-128
strconv.ParseInt: parsing "11111000": value out of range
127
248
于 2013-06-23T17:46:53.490 回答
0

ParseInt将太大的值限制为数据类型的最大值。如果您检查第二个返回值(错误代码),您会看到它返回了一个范围错误。

于 2013-06-23T19:58:21.397 回答