在c中从字节到位数组转换为十六进制(pls help mi)

问题描述 投票:-2回答:1

我目前正在执行网络套接字编程任务,在该任务中,我必须对消息请求​​进行解码,形式为:

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. 从值d8检索4位
  2. 将4位转换回十六进制,即得到值0xD

非常感谢您的帮助!在此先感谢:)

c hex bit-manipulation serversocket decoding
1个回答
0
投票
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

但是您必须确保无论从哪里读取套接字中的数据,它都以预期的字节序发送。您可以通过在调试器中检查缓冲区并确保缓冲区字节符合您的期望来对此进行验证。

© www.soinside.com 2019 - 2024. All rights reserved.