2009-01-16 46 views
1

我必须使用整数完成一些工作,但我有兴趣将它们视为二进制数据,例如,我可以将4个最重要的位的32位值。我想要做的是,我有几个32位值,例如我想在第一个4位,第二个6位和最后一个22位,并将它们连接后得到另一个32位值。如何使用C/C++中的二进制数据处理

任何人都可以请推荐任何图书馆或任何其他方式来做到这一点?谢谢。

回答

4

看来你并不需要一个库。只是变化一点,逻辑和,或者xor应该足以满足你想要做的事情。

编辑:只是举个例子。假设a是一个32位int,而要采取的第一个4位,并将其存储在另一个整数b最低位的位置,你可以这样做:

b = (a & (0xf << (31-4))) >> (31-4) 
2

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

int a; 
int b; 
int c; 

int result = a & 0xF0000000 | b & 0x0FC00000 | c & 0x003FFFFF; 
2

刚刚与按位尝试运营商利用其位对待他们:|,&,^,< <,> >。对于IO来说,如果想要保证它们都是可以被多个平台共享的,请使用htons(),htonl(),ntohs(),ntohl()函数集来对待它们。

2

我总是喜欢使用位字段,并让编译器找出所有的位移。如果您想要更改,它也会变得更容易。但是,你必须小心签名整数,并理解编译器如何处理它们的位域。

尽管如此...

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

    unsigned int u; 
    int   s; 
};