Как сделать слово из байта []? - PullRequest
0 голосов
/ 04 февраля 2019

Я новичок в мире программирования, я хочу преобразовать два байта в слово.

Итак, в основном, у меня есть байтовый массив, где индекс 0 равен Buffer[0]=08, а индекс 1 равен Buffer[1]=06 Я хочусоздать слово из этих двух байтов

, где слово ETHType to be 0x0806

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019
word ETHType = 0;
ETHType = (Buffer[0] << 8) | Buffer[1];

edit: Вы, вероятно, должны добавить маску к каждой операции, чтобы убедиться, что нет перекрытия битов, и вы можете сделать это безопасно в одной строке.

word ETHType = (unsigned short)(((unsigned char)(Buffer[0] & 0xFF) << 8) | (unsigned char)(Buffer[1] & 0xFF)) & 0xFFFF;
0 голосов
/ 04 февраля 2019

Вот макрос, который я использую для этой вещи:

#include <stdint.h>

#define MAKE16(a8, b8) ((uint16_t)(((uint8_t)(((uint32_t)(a8)) & 0xff)) | ((uint16_t)((uint8_t)(((uint32_t)(b8)) & 0xff))) << 8))
0 голосов
/ 04 февраля 2019

Вы бы использовали побитовые операторы и битовое смещение.

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

Это делает следующее:

  • Значение Buffer[0] сдвигается на 8 бит влево.Это дает вам 0x0800
  • Побитовое ИЛИ выполняется между предыдущим значением и значением Buffer[1].Это устанавливает младшие 8 битов на Buffer[1], давая вам 0x0806
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...