Ela*_*ich 5 c bit-manipulation
有谁知道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}
Run Code Online (Sandbox Code Playgroud)
有一个名为bitfile的类似库,但它似乎不支持直接内存操作.它仅支持向文件流提供位.
这不难写,但如果有测试的东西 - 我不会重新发明轮子.
也许这个库中存在的大库的一部分(bzip2,gzip是通常的嫌疑人)?
我认为图书馆被认为"过于简单"; 大多数函数只是一个或两个语句,这会使调用库函数的开销比典型的C程序员容忍的要多一些.:)
也就是说,始终优秀的glib有两个更复杂的面向位的函数:g_bit_nth_lsf()和g_bit_nth_msf().这些用于查找第一个位集的索引,分别从最低位或最高位进行搜索.