gpt4 book ai didi

go - 在 Go 中检查字节序的任何更好的方法

转载 作者:IT王子 更新时间:2023-10-29 00:53:17 27 4
gpt4 key购买 nike

我正在编写一个小程序来使用 Go 检查字节序:

var i int = 0x0100
ptr := unsafe.Pointer(&i)
if 0x01 == *(*byte)(ptr) {
fmt.Println("Big Endian")
} else if 0x00 == *(*byte)(ptr) {
fmt.Println("Little Endian")
} else {
// ...
}

导入“不安全” 包以将*int 转换为*byte。但正如https://golang.org/pkg/unsafe/中提到的:

Package unsafe contains operations that step around the type safety of Go programs.

Packages that import unsafe may be non-portable and are not protected by the Go 1 compatibility guidelines.

是否有更好的方法来确定字节顺序,还是我必须使用不安全的包?

最佳答案

虽然仍然依赖于 unsafe 包,但 Google 的 TensorFlow API for Go 有一个很好的解决方案(请参阅 tensor.go)来测试您机器的字节顺序:

var nativeEndian binary.ByteOrder

func init() {
buf := [2]byte{}
*(*uint16)(unsafe.Pointer(&buf[0])) = uint16(0xABCD)

switch buf {
case [2]byte{0xCD, 0xAB}:
nativeEndian = binary.LittleEndian
case [2]byte{0xAB, 0xCD}:
nativeEndian = binary.BigEndian
default:
panic("Could not determine native endianness.")
}
}

关于go - 在 Go 中检查字节序的任何更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com