C 如何从字节[]生成单词?

C 如何从字节[]生成单词?,c,C,我是编程界的新手,我想把两个字节转换成一个字 基本上,我有一个字节数组,其中索引0是Buffer[0]=08,索引1是Buffer[1]=06 我想从这两个字节创建一个单词 如果单词ETHType为0x0806,您将使用位运算符和位移位 uint16_t result = ((uint16_t)Buffer[0] << 8) | Buffer[1]; uint16_t结果=((uint16_t)缓冲区[0]word ETHType=0; ETHType=(Buffer[0]这里有一

我是编程界的新手,我想把两个字节转换成一个字

基本上,我有一个字节数组,其中索引0是
Buffer[0]=08
,索引1是
Buffer[1]=06
我想从这两个字节创建一个单词


如果单词
ETHType为0x0806

,您将使用位运算符和位移位

uint16_t result = ((uint16_t)Buffer[0] << 8) | Buffer[1];
uint16_t结果=((uint16_t)缓冲区[0]
word ETHType=0;

ETHType=(Buffer[0]这里有一个宏,我用它来处理这个问题:

#include <stdint.h>

#define MAKE16(a8, b8) ((uint16_t)(((uint8_t)(((uint32_t)(a8)) & 0xff)) | ((uint16_t)((uint8_t)(((uint32_t)(b8)) & 0xff))) << 8))
#包括

#定义MAKE16(a8,b8)((uint16_t)((uint8_t)((uint32_t)(a8))&0xff));((uint16_t)((uint8_t)((uint32_t)(b8))&0xff)))你知道如何用数学来做吗?如果你能给我提供一个简单的方法,那就太好了。这正是我所需要的,谢谢,我会接受它作为我的答案,你能不能也解释一下,只是对像我这样的非技术人员来说,想知道到底发生了什么here@OmChoudhary添加了更多细节。添加到将来可能使用此代码的人:确保按位计算中涉及的所有数字都是无符号的非常重要。在此回答中,
Buffer
必须是指向
unsigned char
uint8\u t
或其他无符号类型的指针。否则,
Buffer[1]
将升级为
int
,用垃圾填充最高有效位。
@anatolyg Yes的左操作数需要考虑。向目标类型添加强制转换以防止这些问题。
的左操作数
word ETHType = (unsigned short)(((unsigned char)(Buffer[0] & 0xFF) << 8) | (unsigned char)(Buffer[1] & 0xFF)) & 0xFFFF;
#include <stdint.h>

#define MAKE16(a8, b8) ((uint16_t)(((uint8_t)(((uint32_t)(a8)) & 0xff)) | ((uint16_t)((uint8_t)(((uint32_t)(b8)) & 0xff))) << 8))