gpt4 book ai didi

c - 如何将 PCM 数据转换为十六进制数据

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:25 25 4
gpt4 key购买 nike

我正在开发一个读取麦克风并将 PCM 数据存储在缓冲区中的应用程序,我想将缓冲区转换为十六进制值并对其进行操作。 基本上我想在我的 C 程序中实现 xxd 功能。我可以手动完成,方法是将 PCM 数据写入文件 (file.pcm),然后使用“xxd -r file.c >> file.h”。这将给出结构中的十六进制数据和长度。

最佳答案

那么,我将假设您想要十六进制到十六进制字符串的“转换”。

下面是从标准输入获取一些输入并将其作为十六进制数据写入文件的代码:

#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;
}

请注意以下几点:

  1. 放入文件的字符串是连续的。没有换行符(因为来自输入的换行符将被转换为 0x0A0x0D 或两者)。如果您想添加格式,请添加一个计数器,并根据计数器的值在您的文件中写入空格和换行符(和或其他)(例如,if( !((i+1) % 16 ) ) { buff[0] = '\n'; fwrite(buff, 1, 1, fd); fwrite(buff, 1, 2, fd); 行之后).
  2. 如果您想在生成的文件上使用 xxd,请在从输入中读取 16 个字符后添加一个新行。此外,您需要在每行的开头添加偏移量。
  3. 最后但同样重要的是,从数据到十六进制字符串的转换是在 sprintf 行完成的。它“打印到字符串中”(sprintf) buffchar c 解释为 “两位零左填充大写十六进制”<

关于c - 如何将 PCM 数据转换为十六进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com