如何用字节[]造词?

时间:2019-02-04 16:17:58

标签: c

我是编程领域的新手,我想将两个字节转换为一个单词。

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

其中单词ETHType to be 0x0806

3 个答案:

答案 0 :(得分:5)

您将使用按位运算符和移位。

uint16_t result = ((uint16_t)Buffer[0] << 8) | Buffer[1];

这将执行以下操作:

  • Buffer[0]的值向左移动8位。那给你0x0800
  • 在先验值和Buffer[1]的值之间执行按位OR。这会将低8位设置为Buffer[1],为您提供0x0806

答案 1 :(得分:2)

word ETHType = 0;
ETHType = (Buffer[0] << 8) | Buffer[1];

编辑:您可能应该在每个操作中添加一个掩码,以确保没有位重叠,并且可以安全地在一行中完成操作。

word ETHType = (unsigned short)(((unsigned char)(Buffer[0] & 0xFF) << 8) | (unsigned char)(Buffer[1] & 0xFF)) & 0xFFFF;

答案 2 :(得分:1)

这是我用于此操作的宏:

#include <stdint.h>

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