有谁知道一个好的ANSI C位操作库?我基本上需要的是在Jovial中设置变量中的特定位的能力,比如
// I assume LSB has index of 0
int a = 0x123;
setBits(&a,2,5, 0xFF);
printf("0x%x"); // should be 0x13F
int a = 0x123;
printf("0x%x",getBits(&a,2,5)); // should be 0x4
char a[] = {0xCC, 0xBB};
char b[] = {0x11, 0x12};
copyBits(a,/*to=*/4,b,/*from=*/,4,/*lengthToCopy=*/8);
// Now a == {0x1C, 0xB2}
有一个类似的库叫做bitfile,但它似乎不支持直接内存操作。它只支持将位馈送到文件流。
这并不难写,但如果有什么测试-我不会重新发明轮子。
也许这个库是作为更大的库的一部分存在的(bzip2
,gzip
是通常的嫌疑人)?
5条答案
按热度按时间zlhcx6iw1#
我认为对于一个图书馆来说是“太简单了”;大多数函数只有一两条语句,这使得调用库函数的开销比典型的C程序员所能承受的要多一点。:)
也就是说,始终出色的glib具有两个更复杂的面向位的函数:
g_bit_nth_lsf()
和g_bit_nth_msf()
。这些用于找到第一位集合的索引,分别从最低位或最高位进行搜索。yrefmtwq2#
这似乎是我在质询中要处理的问题
Algorithm for copying N bits at arbitrary position from one int to another
有几种不同的替代方案,最快的是fnieto的组装解决方案。
rta7y2nd3#
使用以下宏,您将取得长足进步:
然后你就可以写了
xv8emn3q4#
也许“FXT”书中的algorithms(页面底部的链接)会很有用。
oxcyiej75#
我可能有点晚了,但我为C编写了this简单位操作库,你可能会感兴趣。