首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 網絡傳輸數據壓縮:整數序列化與變長編碼

     編輯:程式設計綜合問答

問題描述

整數 1 佔 4 字節(01 00 00 00),700 佔 4 字節(02 BC 00 00),網絡傳輸時希望壓縮為 01 02 BC(3 字節)。

解決思路

這屬於整數變長編碼範疇,常見方案:

  • Protocol Buffers (varint):每字節最高位作為延續標誌,7 位存數據。1 → 0x01,700 → 0xAC 0x02(共 3 字節)。
  • LEB128 / VLQ:類似原理,適用於有符號/無符號整數。
  • 手工實現:按 7 位分組寫入,解碼時循環讀取直到最高位為 0。

示例:Varint 編碼 700

700 = 0b10 1011 1100
分組: 0000010 | 1011100  (低 7 位在前)
編碼: 0xAC (10101100) | 0x02 (00000010)
結果: 2 字節

工程建議

  1. 直接使用成熟序列化庫(Protobuf, FlatBuffers, MessagePack),避免重複造輪子。
  2. 若極簡場景,可引入輕量變長編碼實現(如 varint.h)。
  3. 注意網絡字節序(大端),發送端/接收端保持一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved