Go 中将 uint32 转换为 int

问题描述 投票:0回答:3

如何在 Go 中将

uint32
转换为
int

一点背景知识,我正在从文件中读取,这为我提供了字节数组的正确大小,如下所示:

size := binary.BigEndian.Uint32(b[4:])

但是,

bufio.Discard
函数需要一个 int。我能够使用 fmt 将 size 转换为字符串,然后使用 strconv 将其转换为 int。必须有一种更优雅的方法来做到这一点。

go
3个回答
23
投票

只需使用

int()
投射功能


17
投票

Go 编程语言规范

转化

转换是

T(x)
形式的表达式,其中
T
是类型,
x
是一个可以转换为类型
T
的表达式。

例如,

size := binary.BigEndian.Uint32(b[4:])
n, err := rdr.Discard(int(size))

0
投票

接受的答案是有效的,但请注意,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)
}

在转换之前避免意外结果。

© www.soinside.com 2019 - 2024. All rights reserved.