<分区>
有没有办法以模拟编码器(或解码器)逻辑门的方式处理 C++ 中的位(C 也可以!)?
例如:将一个字节(8 位)编码为仅 3 位,或将一个字(16 位)仅编码为 4 位,反之亦然。完全按照编码器和解码器逻辑门的方式。
这样做的目的是数据压缩(我知道有更好的方法,但这是过程的一个阶段,出于项目目的必须以这种方式完成)
编码器逻辑门:
解码器逻辑门:
注意:它可以通过按位运算符来完成,但我需要一种非常非常快速和高效的方法,这样我才能以对等秒的方式完成数十亿次!
<分区>
有没有办法以模拟编码器(或解码器)逻辑门的方式处理 C++ 中的位(C 也可以!)?
例如:将一个字节(8 位)编码为仅 3 位,或将一个字(16 位)仅编码为 4 位,反之亦然。完全按照编码器和解码器逻辑门的方式。
这样做的目的是数据压缩(我知道有更好的方法,但这是过程的一个阶段,出于项目目的必须以这种方式完成)
编码器逻辑门:
解码器逻辑门:
注意:它可以通过按位运算符来完成,但我需要一种非常非常快速和高效的方法,这样我才能以对等秒的方式完成数十亿次!
最佳答案
如果以字节为单位打包这些位,
编码器:
Q= 4 * ((D & 0xF0) != 0) + 2 * ((D & 0x66) != 0) + ((D & 0xAA) != 0);
解码器:
D = 1 << Q;
如果你想要一个更快的编码器,
byte QTable[]= {
0, 0, 3, 3, 2, 2, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3,
4, 4, 7, 7, 6, 6, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
6, 6, 7, 7, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
6, 6, 7, 7, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
5, 5, 7, 7, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7,
5, 5, 7, 7, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
};
Q= QTable[D];
关于c++ - 使用编码器/解码器逻辑门规则在 C++ 中编码/解码数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58132567/