猿问

golang ParseInt int8 不是无符号的

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

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

返回 127

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

返回正确的数字 248

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


阿晨1998
浏览 237回答 2
2回答

LEATH

您解析正符号整数,负符号整数以减号为前缀。对于无符号整数,解析为无符号。此外,始终检查错误。例如,package mainimport (    "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-128strconv.ParseInt: parsing "11111000": value out of range127248

12345678_0001

ParseInt限制对于数据类型来说太大到最大值的值。如果您检查第二个返回值(错误代码),您将看到它返回了一个范围错误。
随时随地看视频慕课网APP

相关分类

Go
我要回答