gpt4 book ai didi

c++ - 在 C++ 中覆盖备用字节对

转载 作者:行者123 更新时间:2023-11-28 08:22:37 26 4
gpt4 key购买 nike

我正在尝试通过用 0 覆盖交替字节对(2 个字节)来从扬声器的一侧播放声音。我在 HEX 编辑器中检查过,交替字节对确实有重复。

我做了一个小程序来做同样的事情。但是,它不起作用。你能指出我在这里做错了什么吗?

int main()
{
FILE *file, *fileWrite;
unsigned char *buffer;
unsigned long fileLen;
int n;

file = fopen("sound.dat", "rb");
fileWrite = fopen("sound1.dat", "w+");

// Get the File Length
//Get file length
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);

buffer = (unsigned char *)malloc(fileLen+1);
n = fread(buffer, fileLen, 1, file);
printf("%s\n", &buffer);

int i;

for(i = 0 ;i < fileLen; i = i + 4)
{
buffer[i+2] = '\0';
buffer[i+3] = '\0';
// printf("%.2X %.2X %.2X %.2X \n", (int)buffer[i],(int)buffer[i+1], (int)buffer[i+2],(int)buffer[i+3]);

}

n = fwrite(buffer, fileLen, 1, fileWrite);

fclose(file);
fclose(fileWrite);
}

更新:如果十六进制读取是

4F D0 4F D0 FF 05 FF 05

我想成功

4F D0 00 00 FF 05 00 00

已解决!!!

谁能帮我解决这个问题:Audio File: Playing data through one Speaker Only?

最佳答案

你的循环边界偏离了几个:

for(i = 0 ;i < fileLen; i = i + 4)

应该是

for(i = 0 ;i < fileLen - 3; i = i + 4)

否则分配给 buffer[i + 3] 将覆盖内存中超出缓冲区末尾的内容。这能解决问题吗?

关于c++ - 在 C++ 中覆盖备用字节对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5241816/

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