我正在开发一个应用程序,它读取麦克风并将PCM数据存储在缓冲区中,我想将缓冲区转换为十六进制值并对其进行操作。 基本上我想在我的C程序中实现xxd功能。 我可以通过将PCM数据写入文件(file.pcm)然后使用来手动完成 “xxd -r file.c>> file.h”。这将给出结构中的十六进制数据和长度。
答案 0 :(得分:1)
好吧,我假设你想要hex到hex-string“转换”。
这是代码从stdin获取一些输入并将其作为十六进制数据写入文件:
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE* fd = NULL; // File descriptor.
unsigned char c = '\0'; // Character.
int status = 0; // fread() status.
if(argv[1] == NULL)
{
fprintf(stderr,
"Usage: %s <file name>\n",
argv[0]);
return 1;
}
fd = fopen(argv[1], "w");
if(fd == NULL)
{
fprintf(stderr,
"Error: cannot write to file %s.\n",
argv[1]);
return 1;
}
for(status = fread(&c, 1, 1, stdin);
c != EOF && status != 0;
status = fread(&c, 1, 1, stdin)
)
{
char buff[2];
sprintf(buff, "%02X", (unsigned char)c);
c = 0;
fwrite(buff, 1, 2, fd);
}
fclose(fd);
return 0;
}
请注意以下几点:
0x0A
,0x0D
或两者都有。如果要添加格式,请添加计数器,并根据计数器的值(例如,if( !((i+1) % 16) ) { buff[0] = '\n'; fwrite(buff, 1, 1, fd); }
行后fwrite(buff, 1, 2, fd);
)为文件写入空格和换行符(或其他) sprintf
行完成的。它'打印到字符串'(sprintf)buff
char c
被解释为“两位数左半填充大写十六进制”