我有一堆id以uint32_t-uint32_t
形式的两个无符号整数,用连字符分隔。我想要压缩它们。我想将它们转换为BCD(换句话说,每个字节两位数)并输出压缩字符串。例如,90-1418
90-1418 -> 0x39 0x00 0x2d 0x31 0x34 0x31 0x38
\ / | \ / \ /
0x90 0x2d 0x14 0x18
C中是否有可以压缩/解压缩此类字符串的库?
答案 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个字节。
这总会产生比你更短的结果。