我希望将 16 位整数 block 流式传输到程序中。 (可以来自文件或标准输入,等等。)尽可能简洁,我的起点是计算输入程序的八位字节:
#include <cassert>
#include <cstdint>
#include <iostream>
int main() {
int16_t samples[768];
while (std::cin.good()) {
std::cin.read(reinterpret_cast<char *>(samples), sizeof(samples));
if (std::cin.gcount() == sizeof(samples)) {
// ...
}
}
assert(std::cin.eof());
return 0;
}
虽然这可行,但我想确保我没有遗漏更多执行相同功能的 C++ 方法。 (创建一个 std::vector 并直接读入它的内存空间?)这应该是高效的,所以我假设一次读取一个 16 位整数并附加到一个 vector 是不可能的。
想法?
最佳答案
所写的代码应该读取一个 16 位值的数组。唯一的问题是它假定写入文件的字节顺序与读取时使用的字节顺序相同。从问题中不清楚是否是这种情况。在交换文件的情况下,例如在 x86 和 Sparc 机器之间,您通常选择 网络字节顺序 并在读取时使用 ntohs()
处理值(和 htons()
写作时)。尽管这些看起来像函数,但它们通常只是宏,不会对使用网络字节顺序的平台上的值做任何事情。
关于c++ - 高效的二进制流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126155/