将 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 int 到 unsigned char 数组转换
SWIG 将 unsigned char* 转换为 20 字节缓冲区 Java 结构