為了決定機器的位元組序,可以考慮使用下列Go 程式碼:
<code class="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 { // ... }</code>
但是,這種方法依賴不安全的套件,這可能會導致不可移植且可能不安全的程式碼。幸運的是,Go 的TensorFlow API 提供了一種替代解決方案,它也利用了不安全的套件,但以更穩健的方式:
<code class="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.") } }</code>
此程式碼片段利用了uint16 可以儲存在2 中的事實-byte 緩衝區,位元組的順序取決於系統的位元組順序。透過檢查緩衝區中位元組的排列,程式碼確定係統的位元組序並相應地設定 nativeEndian 變數。
利用此方法提供了一種更可靠的方法來檢查 Go 中的字節序,同時仍然遵守所施加的限制通過不安全的包裹。
以上是如何在不犧牲安全性的情況下確定 Go 中的位元組序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!