将 5 字节压缩为 4 字节

问题描述 投票:0回答:1

我试图了解更多关于 BCD、打包/解包字节数组和字节移位的信息,在这张图片中,我做了一个我不确定的指令示例,一个 5 字节的数组被压缩或打包成一个 4 字节的数组字节,反之亦然。它将

0x93, 0x87, 0xE3, 0xC3, 0x17
转换为
0xBC, 0x3C, 0x61, 0xD3
。谁能告诉我所使用的方法是否有通用术语,或者是否有关于此方法或类似方法的合适文档? enter image description here

非常感谢

binary endianness bit-shift bcd
1个回答
0
投票

这很奇怪,并且一定来自某个深奥的系统,该系统正在实现该系统特有数据的字节数减少 20%(也许是通过慢速链路传输)。这不是通用的“压缩”方案。

为了方便起见,我们将 5 个原始字节中的每一个都标记为“A”到“E”,并从右到左(常规)从“0”到“7”对它们的位进行编号。

“压缩”只是从 5 个字节中的每个字节中删除一个或多个 MSB,然后将剩余位放入(假定的)32 位变量中。结果的低位对应于第一个字节“A”,然后“B”的位位于这些位的左侧,依此类推。

结果变量将包含(为了易读,使用零宽度管道):

E4E3E2E1E0|D6D5D4D3D2D1D0|C6C5C4C3C2C1C0|B6B5B4B3B2B1B0|A5A4A3A2A1A0

保留 5 位“E”、7 位“D”、7 位“C”、7 位“B”和 6 位“A”。
总共 5+7+7+7+6 = 32 位 = 4 个字节。 QED。

当一个人知道数据,并且需要一种快速的方法来减少 20% 的开销(存储或传输时间)时,这是一个合理的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.