Fuchsia 客戶政策

雖然 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。如要轉換整數值,請使用這些方法