c - 在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 给出。
我正在努力解决问题的两个部分:
- 从值 d8 中检索 4 位
- 将 4 位转换回十六进制,即。获取值 0xD
非常感谢您对此的任何帮助!提前致谢 :)
解决方案
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
但是您必须确保无论您从哪里读取来自套接字的数据,它都以预期的字节顺序发送。您可以通过在调试器中检查缓冲区并确保缓冲区字节符合您的预期来验证这一点。
推荐阅读
- navigation - Flutter Drawer 无法正确导航
- java - 使用 Executor 服务的多线程是顺序处理而不是并发处理
- sql - sql server 数据长度
- python - 在python中查找两种时间格式之间的持续时间?
- java - BindingResult 不起作用
- android - Android textview 可水平滚动
- x86 - UEFI 引导加载程序中的 SPI 寄存器读写应用程序
- visual-studio - 使用 VS 2017 中的 cl.exe 编译 arm 或 arm64 程序时缺少 mspdbcore.dll
- swagger-ui - Swagger UI 的 requestInterceptor 中的 Promise
- react-native - 为什么使用 this.setState 会导致超过最大更新深度?