8); file.put(le-6ren">
gpt4 book ai didi

c++ - 将整数发送到 fstream 作为 little endian

转载 作者:行者123 更新时间:2023-11-28 00:49:42 26 4
gpt4 key购买 nike

我正在编写用于创建和保存 WAV 文件的函数,但我不知道如何将数字发送到流:

ofstream file;
file.open("sound.wav");
file << "RIFF";
file << (int) 32;
file << "WAVE";

我正在尝试实现这个 WAVE 文件结构:https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

问题出在这里,输出是这样的:

RIFF32WAVE

最佳答案

流媒体运营商<<执行格式化 输出 - 它将值转换为文本。这不是您想要写入二进制文件格式的内容。

相反,您想使用未格式化 输出函数:put对于单字节,write对于多个字节:

file.write("RIFF", 4);

// The length field is little-endian, so write the lowest byte first
file.put(length);
file.put(length >> 8);
file.put(length >> 16);
file.put(length >> 24);

file.write("WAVE", 4);

更新:如评论中所述,您还应该以二进制模式打开文件并使用经典的“C”语言环境注入(inject)它,以防止任何东西弄乱您编写的字节:

file.open("sound.wav", std::ios_base::out | std::ios_base::binary);
file.imbue(std::locale::classic());

关于c++ - 将整数发送到 fstream 作为 little endian,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14750496/

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