gpt4 book ai didi

C:计算跨越多个字节的一系列位

转载 作者:行者123 更新时间:2023-11-30 17:48:46 26 4
gpt4 key购买 nike

我有一个无符号字符字节数组,例如:

unsigned char[20] = {0xff, 0x1a, 0x70, 0xa9, ...}

我现在想要对该数组的 x 个连续位执行计算(使用 x > 8;例如 x = 15)。特别是,我想对每 15 位执行多数投票,这会返回一位。随后,返回的单个位将再次转换为无符号字符字节。

我已经实现了多数投票算法。我还为整个问题实现了一个简单的算法,其工作原理如下:

  1. 将字节数组转换为位数组(也是保存零和一的无符号 char[])
  2. 循环位数组并将每组 x 位传递给多数投票函数
  3. 也以位数组 (unsigned char[]) 的形式收集多数投票结果
  4. 循环此位数组并使用按位运算从每个 8 位序列构造字节。

对我来说,这似乎很直观,但同时也很麻烦。

您是否认为有任何优化的可能性,或者您是否可以提供更灵活的算法?

最诚挚的问候,

最佳答案

您可以使用类似的函数获取数组的下一位

 int nextBit( unsigned char [] arr, int *pByte, size_t nBytes, int *pBit ) 
{
int result;

if( *pByte >= nBytes ) {
// Padding, neccessary if nBytes % 15 != 0
return 0;
} else {
result = ( arr[*pByte] >> (*pBit) ) & 0x1;
if( *pBit == 7 ) {
(*pByte)++;
*pBit = 0;
} else {
(*pBit)++;
}
return result;
}
}

和循环:

 int byte=0, bit=0;
int result;
int i;

while( byte < sizeof( arr ) ) {
for( i=0; i<15; i++ ) {
result = nextBit( arr, &byte, sizeof( arr ), &bit );
// do the majority voting
}
}

可以创建一个非常相似的函数来直接创建多数位的数组

关于C:计算跨越多个字节的一系列位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com