雖然 Fuchsia 僅可在小型單端 (LE) CPU 架構上執行, Fuchsia 專案仍然需要考量大端 (BE) 的問題。
本頁面說明以下內容:
- 端點問題的發生地點
- 處理方式
- 為什麼會顯示這些選擇
端點問題的發生地點
週邊裝置
許多周邊裝置硬體會定義多位元組 BE 值, 已產生轉換
舊版格式
網路位元組順序為 BE。 SCSI 資料結構如下:
大端序 CPU 執行
即使 Fuchsia 從未在 BE CPU 上執行 (在某些情況下,至少 理論上,我們的部分程式碼可能會被移植到 BE CPU
每當我們定義多位元組的值時,就會建立另一個平台 寫入或讀取該值,我們的程式碼 (為開放原始碼) 可能會轉移至 整合到該平台以達成上述目標
如何處理 C/C++ 程式碼和文件中的位元組問題
模組不太可能發生任何終端問題
許多模組不需對終端問題採取任何行動;但只會由執行 Fuchsia 的單一 CPU 解讀。
如果應用程式可攜碼轉移至其他作業系統,或是資料可能由任何管道匯出:
C 或 C++ 的建議樣式是
#include <endian.h>
...
static_assert(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__);
或透過註解說明 與 BE 不相容
(不用做任何事,請盡量明確指出這些程式碼是 與 BE 不相容)。
模組必須解決終端問題
在性質的結構中,最好加入 「轉換」從低端到 CPU 位元組的資料;這是一種形式 自行記錄程式碼當然,大端資料一律應使用巨集。
適用於 C/C++
最佳樣式是使用 endian.h 的 LE16 ..BE64 巨集,請 「Google Play 遊戲」在所有位置均可使用,包括 DDK。
#include <endian.h>
...
hw_le_struct.int_field = LE32(program_int);
program_long = BE64(hw_be_struct.long_field);
Rust 用
如要存取位元組緩衝區中的多位元組值,請使用這個 Crate。如要轉換整數值,請使用這些方法。