golang ParseInt int8不是无符号的

golang ParseInt int8不是无符号的,go,Go,尝试将8位二进制字符串转换为字节(无符号) 返回127 strconv.ParseInt("11111000", 2, 16) 返回正确的数字248 根据ParseInt文档,8代表int8,从-128到127。如果是,为什么返回值不能是负数 解析正有符号整数时,负有符号整数的前缀是负号。对于无符号整数,解析为无符号整数。此外,始终检查错误 比如说, package main import ( "fmt" "strconv" ) func main() { // +

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

返回127

strconv.ParseInt("11111000", 2, 16)
返回正确的数字248


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

解析正有符号整数时,负有符号整数的前缀是负号。对于无符号整数,解析为无符号整数。此外,始终检查错误

比如说,

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

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

127
-128
strconv.ParseInt: parsing "11111000": value out of range
127
248