ANSI C的位操作库

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是通常的嫌疑人)?

unw*_*ind 7

我认为图书馆被认为"过于简单"; 大多数函数只是一个或两个语句,这会使调用库函数的开销比典型的C程序员容忍的要多一些.:)

也就是说,始终优秀的glib有两个更复杂的面向位的函数:g_bit_nth_lsf()g_bit_nth_msf().这些用于查找第一个位集的索引,分别从最低位或最高位进行搜索.

  • 真?`stdbool.h`非常简单. (2认同)

GRB*_*GRB 4

这似乎是我在问题中要解决的问题

将任意位置的 N 位从一个 int 复制到另一个 int 的算法

提供了几种不同的替代方案,最快的是 fnieto 的组装解决方案。