在C

时间:2016-12-08 20:39:57

标签: c compression bcd

我有一堆id以uint32_t-uint32_t形式的两个无符号整数,用连字符分隔。我想要压缩它们。我想将它们转换为BCD(换句话说,每个字节两位数)并输出压缩字符串。例如,90-1418

90-1418 -> 0x39 0x00 0x2d 0x31 0x34 0x31 0x38
             \    /    |    \    /    \    /
              0x90    0x2d   0x14      0x18

C中是否有可以压缩/解压缩此类字符串的库?

1 个答案:

答案 0 :(得分:1)

您可以将号码存储为( ( num1 * factor ) + num2 ) * 16 + factor

001011000101010110100111
\/\_________/\_____/\__/
 \          \      \   \___ The number of bits in first number (without leading zeros), padded to 4 bits.
  \          \      \______ The first number in big-endian byte order.
   \          \____________ The second number in big-endian byte order.
    \______________________ Padding so the whole takes a multiple of 8 bits.

3个字节。

Max = 32 + 4 + 32 + 4 = 9个字节。

这总会产生比你更短的结果。