如何在 Go 中将
uint32
转换为 int
?
一点背景知识,我正在从文件中读取,这为我提供了字节数组的正确大小,如下所示:
size := binary.BigEndian.Uint32(b[4:])
但是,
bufio.Discard
函数需要一个 int。我能够使用 fmt 将 size 转换为字符串,然后使用 strconv 将其转换为 int。必须有一种更优雅的方法来做到这一点。
只需使用
int()
投射功能
接受的答案是有效的,但请注意,go 中的
int
大小取决于架构https://go.dev/ref/spec#Numeric_types。因此,如果您在 32 位系统上运行程序,则需要将 uint32
转换为 32 位大小的有符号整数。如果您要转换的数字大于 max int 值,则可能会导致意外结果。 (即int溢出)
package main
import (
"fmt"
"math"
)
var i uint32
func main() {
i := math.MaxInt32 + 1
fmt.Println(i) // 2147483648
fmt.Println(int32(i)) // -2147483648
}
所以为了安全起见,你可以投一张支票
if size > math.MaxInt {
log.Printf("size=%d int would overflow", size)
}
在转换之前避免意外结果。