Преобразование байта в битовый массив в шестнадцатеричный формат c (пожалуйста, помогите mi) - PullRequest
0 голосов
/ 26 мая 2020

В настоящее время я работаю над задачей программирования сетевого сокета, где мне нужно декодировать запрос сообщения, который имеет форму:

uint8_t buffer[16] = {0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab}

Прочитать с помощью read ():

uint8_t buffer[2048];     
read(conn->socketfd, buffer, sizeof(buffer)

Теперь мне нужно взять первый шестнадцатеричный байт 'd8', который является двоичным 11011000, и извлечь первые ЧЕТЫРЕ бита 1101 и получить его шестнадцатеричное число, которое задается 0xD.

Я борюсь с двумя частями проблемы:

  1. Получение 4 бита из значения d8
  2. Преобразование 4 бит обратно в шестнадцатеричное, ie. получение значения 0xD

Был бы очень признателен за любую помощь в этом! Заранее спасибо :)

1 Ответ

0 голосов
/ 26 мая 2020
uint8_t first_hex_byte = buffer[0]; // 0xd8
uint8_t first_4bits = (buffer[0] >> 4) & 0xf; // 0xD
printf("%x\n", (int)first_4bits); // Print it as hex

Но вы должны убедиться, что откуда бы вы ни читали данные из сокета, они отправлялись с ожидаемым порядком байтов. Вы можете проверить это, проверив буфер в отладчике и убедившись, что байты буфера соответствуют вашим ожиданиям.

...