1

我必须对整数做一些工作,但我有兴趣将它们视为二进制数据,例如我可以获取 32 位值的 4 个最高有效位。我想要做的是,我有几个 32 位值,例如,第一个 4 位,第二个 6 位和最后一个 22 位,然后将它们连接起来并获得另一个 32 位值.

谁能推荐任何图书馆或任何其他方式来做到这一点?谢谢你。

4

5 回答 5

4

看来您不需要图书馆。对于您想要做的事情,只需移位、逻辑与或或和 xor 就足够了。

编辑:只是举个例子。假设a是一个 32-bit int,并且您想要获取前 4 位并将其存储在另一个 integer 的最低位位置b,您可以这样做:

b = (a & (0xf << (31-4))) >> (31-4)
于 2009-01-16T16:51:46.463 回答
2

只使用内置的按位运算符?

int a;
int b;
int c;

int result = a & 0xF0000000 | b & 0x0FC00000 | c & 0x003FFFFF;
于 2009-01-16T16:54:17.427 回答
2

只需尝试使用位运算符来使用它们的位来处理它们:|、&、^、<<、>>

对于 IO,如果要保证它们都可以被多个平台读取,请使用htons()、htonl()、ntohs()、ntohl()函数集来处理它们。

于 2009-01-16T16:58:28.790 回答
2

我总是更喜欢使用位域,让编译器找出所有的位移。如果您想进行更改,它也会变得更容易。但是,您必须小心有符号整数,并了解编译器如何根据位域处理它们。

尽管如此...

union _type
{
    struct
    {
        unsigned int a : 22;
        unsigned int b : 6;
        unsigned int c : 4;
    };

    unsigned int u;
    int          s;
};
于 2009-01-20T19:44:52.143 回答
0

现有几篇关于位操作的文章,Absolute Beginner's Guide to Bit Shifting?解释设置、清除和测试单个位的算法

于 2009-01-17T17:51:06.017 回答