如果我有一个字节数组,如何将偏移量位复制到一个新的字节数组中?

时间:2019-02-13 04:31:40

标签: c++ arrays bit

如果我有一个字节数组,将位复制到新的字节数组的最佳方法是什么?

我正在做一个Golomb编码,用稀疏的1s编码一个0的行程。在Golomb代码中,商是用余数编码的,因此您可以用比平均二进制数所需的位数少的位数来计算0的数目。得到的代码是商,余数,一些零代表多少个1,另一商,余数,一些零代表1,等等。

当我更新此Golomb代码时,余数之后的所有内容都可以保持不变。因此,我想以一种有效的方式复制数据。我应该使用按位运算符还是memcopy?

uint8_t *bytes; 
uint16_t length; // how many bits are needed for a given code

uint8_t *bytes = new uint8_t[length];
for (size_t i = 0; i < length; i++) {
    *(bytes + i) = ...; // set bits with some bitwise operators
}

假设我需要更新byte [2]的第5位。从第6位到字节[length]的所有内容都可以保持不变。但是,由于此更改,字节[2]的第6位必须是字节[3]的开始,从而有效地将每个字节向右移2个点。

memcpy从字节[2]的第6位到字节[长度],然后对最后2位进行按位运算是否更好?或循环遍历字节并使用按位运算符(由于我们从第6位开始,这可能会变得混乱)。还是可以将指针“移动地址”几位? (不确定最后的建议是否有意义,但在我看来,数据是正确的,所以不确定为什么我不能只是将“起点”移至其他位置)

0 个答案:

没有答案