为了账号安全,请及时绑定邮箱和手机立即绑定

golang ParseInt int8 不是无符号的

golang ParseInt int8 不是无符号的

Go
阿晨1998 2021-06-18 18:00:48
尝试将 8 位二进制字符串转换为字节(无符号)strconv.ParseInt("11111000", 2, 8)返回 127strconv.ParseInt("11111000", 2, 16)返回正确的数字 248根据ParseInt文档,8代表int8,即-128到127。如果是这样,为什么返回值不是负数?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

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


例如,


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


查看完整回答
反对 回复 2021-06-21
?
12345678_0001

TA贡献1802条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-06-21
  • 2 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信