我有一个赋值,其中我必须将4个无符号char中的字节打包到一个无符号int中。
代码如下:
#include <stdio.h>
int main (){
//Given this
unsigned char a = 202;
unsigned char b = 254;
unsigned char c = 186;
unsigned char d = 190;
//Did this myself
unsigned int u = a;
u <<=8;
u |= b;
u <<=8;
u |= c
u <<=8;
U |= d;
}
我知道:
u <<=8;
将u中的位向左移位8。但我很困惑像u |= b;
这样的线路是干什么的?
简单地说,我试图更好地理解我编写的代码是如何将4个无符号char中的字节打包为无符号int的。我以一种野蛮的方式提出了这个解决方案。我只是尝试用不同的方式来打包字节,这种方式奏效了。但我真的不知道为什么。
提前谢谢。
二进制中为202
的a
将为11001010
在二进制中是254
的b
将是11111110
在二进制中是186
的c
将是10111010
在二进制中是190
的d
将是10111110
unsigned int u = a;
u <<= 8; // now u would be 11001010 00000000
u |= b; // now u would be 11001010 11111110
u <<= 8; // now u would be 11001010 11111110 00000000
u |= c; // now u would be 11001010 11111110 10111010
u <<= 8; // now u would be 11001010 11111110 10111010 00000000
u |= d; // now u would be 11001010 11111110 10111010 10111110
// This is how a b c d
// are packed into one integer u.