我有一个C中的无符号字符数组:
unsigned char array[] = { 0xF0, 0xCC, 0xAA, 0xF0};
/* Represented as binary: 11110000 11001100 10101010 11110000 */
我想从这个数组中提取最后N位,并将它们存储在一个整数中。例如,如果我想提取最后5位,结果应该是:
int i = 32; /* Represented as binary: 10000 */
我尝试使用BIGNUM库,但我发现它是矫枉过正,有点慢,为这一目的。有没有更有效的方法在C中实现这一点?
随附代码:
unsigned char array[] = { 0xF0, 0xCC, 0xAA, 0xF0};
int i = 0;
int j;
int totalBits = sizeof(array) * 8;
int startBit = totalBits - 5;
for (j = startBit; j < totalBits; j++)
{
i = i << 1;
i = i | (array[j] & 1);
}
1条答案
按热度按时间oxalkeyp1#
勇敢的努力!谢谢你展示你的尝试。
我在你的版本中添加了一些评论:
下面是一个粗略的版本,似乎工作:
希望这对你有帮助。
最后警告:在这个代码中,
N
是63
...应该增加检查N
不超过累加器foo
的宽度,如果N
正好是那个数字,则绕过移位和掩码操作。PS:当使用位操作时,使用
unsigned
数据库通常更安全。一些C实现显然反对不适当地篡改符号位。