如何实时合并十六进制值?流式Hex数据格式转换技术问询
解决方案
核心思路是调整输出格式化逻辑,不需要修改原始缓冲区的数据,直接在写入CSV时将每两个连续字节合并为一组输出——本质是字符串格式调整,无需位移/逻辑或操作。
修改后的代码示例
uint8_t *curr_ptr; uint8_t* dec_buffer=(uint8_t*)calloc(4000,sizeof(uint8_t)*max_len); init=dec_buffer; curr_ptr=init+((count)*max_len); int start = 17; int end = 145; // 批量处理成对的字节 for(int j=start; j <= end - 1; j += 2){ // 连续打印两个字节的十六进制,组间用空格分隔 fprintf(f_write[file_count], "%02x%02x ", *(curr_ptr+j), *(curr_ptr+j+1)); } // 处理剩余的单个字节(如果总字节数为奇数) if((end - start + 1) % 2 != 0){ fprintf(f_write[file_count], "%02x ", *(curr_ptr+end)); } // 行尾换行 fprintf(f_write[file_count], "\n");
关键说明
- 步长调整:循环步长从
1改为2,每次取两个连续字节,用%02x%02x直接拼接成4位十六进制字符串,消除单字节间的空格。 - 边界处理:计算目标区间内的总字节数,若为奇数则单独打印最后一个字节,避免数组越界。
- 换行修正:原代码中
j%145==0的判断存在逻辑漏洞(起始值为17,145并非循环变量的必然落点),改为处理完所有目标字节后直接换行,符合需求的每行结尾格式。
实时处理适配
如果数据流是持续流入、分批处理的,只需保证每次处理的缓冲区片段都按上述逻辑两两组合输出即可,无需额外缓存数据,完全适配实时处理场景。
内容的提问来源于stack exchange,提问作者Koushik
相关产品推荐
相关产品推荐

