![](/img/trans.png)
[英]Is there a portable Binary-serialisation schema in FlatBuffers/Protobuf that supports arbitrary 24bit signed integer definitions?
[英]Are signed binary representations portable between architectures?
我想在字符流中通過網絡發送帶符號的整數,和/或以可移植的二進制表示形式將其保存到磁盤。
當我分配一個變量(我使用的是long long,它是64位,帶符號)時,存儲在內存中的普通二進制表示是否被認為可以在不同的機器體系結構和操作系統之間移植?
例如,帶符號的負long long整數的二進制表示在ARM機器上是否與x86機器上的相同?如果是,則利用這一事實是否被視為良好/可接受的做法?
編輯:我們已經通過使用整數運算從LSB端將整數解構為char來解決字節順序的問題。 我的問題是2的補碼符號表示在整個體系結構中是否一致。
簡而言之: NO ,您不能依賴跨體系結構的二進制兼容性。 不同的主機使用不同的字節順序(稱為endianess )。
為了通過網絡傳輸數字,通常同意使用大端格式(又名網絡字節順序)。 如果兩台計算機都使用大字節序格式,則它們將自動利用此優勢。 對於ARM體系結構,字節順序需要轉換。
要將網絡轉換為主機字節順序,反之亦然,可以使用arpa/inet.h
的ntohl()
, ntohs()
, htonl()
和htons()
函數族。
在C / C ++中,整數不是“設計可移植的”。 您可能會遇到字節順序問題。 這與他們被簽名或未簽名無關 。
如果您正在編寫此軟件,請確保以已知的字節順序發送整數。 接收部分需要以相同的順序讀取它們,必要時執行字節順序轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.