将 unsigned char 字节打包到 c 中的 unsigned int 中

Posted

技术标签:

【中文标题】将 unsigned char 字节打包到 c 中的 unsigned int 中【英文标题】:packing unsigned char bytes into an unsigned int in c 【发布时间】:2014-09-17 03:17:08 【问题描述】:

我有一个任务,我必须将 4 个 unsigned char 中的字节打包成一个 unsigned 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;do 之类的行感到困惑?

简单地说,我想更好地理解我想出的代码是如何将字节从 4 个 unsigned char 打包成一个 unsigned int 的。我以一种蛮横的方式想出了这个解决方案。我只是试图以不同的方式打包字节,这种方式很有效。但我不确定为什么。

提前谢谢你。

【问题讨论】:

【参考方案1】:

a 在二进制中是 202 将是 11001010

b 在二进制中是 254 将是 11111110

c 在二进制中是186 将是10111010

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

【讨论】:

以上是关于将 unsigned char 字节打包到 c 中的 unsigned int 中的主要内容,如果未能解决你的问题,请参考以下文章

在C语言中,unsigned char是啥类型

在C语言中,unsigned char是啥类型?

C - unsigned int 到 unsigned char 数组转换

SWIG 将 unsigned char* 转换为 20 字节缓冲区 Java 结构

C语言中把unsigned char 型数据赋值给int 型数据会不会出问题

用unsigned char 表示字节