将无符号char字节打包为c中的无符号int



我有一个赋值,其中我必须将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的。我以一种野蛮的方式提出了这个解决方案。我只是尝试用不同的方式来打包字节,这种方式奏效了。但我真的不知道为什么。

提前谢谢。

二进制中为202a将为11001010

在二进制中是254b将是11111110

在二进制中是186c将是10111010

在二进制中是190d将是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.

最新更新