[英]C++: How to read and write multi-byte integer values in a platform-independent way?
我正在開發一個簡單的協議,用於從/向緩沖區讀取/寫入 integer 值。 絕大多數整數都低於 128,但更大的值是可能的,所以我正在尋找某種形式的多字節編碼來以簡潔的方式存儲值。
以獨立於平台(即字節順序不可知)的方式讀取/寫入多字節值的最簡單和最快的方法是什么?
XDR格式可能會對您有所幫助。 如果非要用一句話來概括的話,那就是整數的一種二進制 UTF-8。
編輯:正如我在下面的評論中提到的,我“知道”XDR,因為我在辦公室工作中使用了幾個與 XDR 相關的功能。 只有在您發表評論后,我才意識到我每天使用的“打包 XDR”格式甚至不是官方 XDR 文檔的一部分,所以我將單獨描述它。
因此,這個想法是:
我不知道這是一種“真實”的格式,還是我的(前)同事自己創建的(這就是我不發布代碼的原因)。
您可能對以下功能感興趣:
htonl, htons, ntohl, ntohs - 在主機和網絡字節順序之間轉換值
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
文本將是我的第一選擇。 如果你想要一個可變長度的二進制編碼,你有兩個基本的選擇:
您顯然將它們與一些值位合並。
對於一個長度指示,它會給你一些長度和一些位一起給出的東西(參見例如 UTF-8),
對於結束標記,您可以例如 state 設置的 MSB 指示最后一個字節,因此每個字節有 7 個數據位。
其他變體顯然是可能的。
您可以嘗試 網絡字節順序
Google 的協議緩沖區提供了使用可變寬度編碼的預制實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.