首页 > 解决方案 > 在c中从字节转换为位数组到十六进制(请帮助mi)

问题描述

我目前正在处理网络套接字编程任务,我必须解码消息请求,格式为:

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

非常感谢您对此的任何帮助!提前致谢 :)

标签: chexbit-manipulationserversocketdecoding

解决方案


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

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


推荐阅读