您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

关于将uint8转换为int8的困惑

关于将uint8转换为int8的困惑

类型化常数的值必须始终可以由常数类型的值准确表示。以下常量表达式是非法的:

uint(-1)     // -1 cannot be represented as a uint
int(3.14)    // 3.14 cannot be represented as an int
int64(Huge)  // 1267650600228229401496703205376 cannot be represented as an int64
Four * 300   // operand 300 cannot be represented as an int8 (type of Four)
Four * 100   // product 400 cannot be represented as an int8 (type of Four)

并非所有整数值都可以适合所有整数类型。可能会出现两个问题:该值可能太大,或者可能是分配给无符号整数类型的负值。例如,int8的范围是-128到127,因此永远不能将超出该范围的常量分配给int8类型的变量:var i8 int8 = 128 // Error: too large. 类似地,uint8(也称为字节)的范围是0到255,因此不能使用较大或负的常量被分配给一个uint8:var u8 uint8 = -1 // Error: negative value. 这种类型检查可以捕获如下错误

    type Char byte
    var c Char = '世' // Error: '世' has value 0x4e16, too large.

如果编译器抱怨您使用常量,则可能是真正的错误

我的实际需求的转换byte,以int32解析二进制文件时。我可能会遇到常量字节0xfc,并应在考虑到符号的情况下int8将其转换为之前将其传输到int32

是的,这是要走的路:

    var b byte = 0xff
    i32 := int32(int8(b))
    fmt.Println(i32) // -1
其他 2022/1/1 18:22:32 有526人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶