高效的二进制流

时间:2011-11-14 18:17:35

标签: c++

我正在寻找将16位整数块流式传输到程序中。 (可以来自文件或标准输入,无论如何。)尽可能简洁,我的起点计算输入到程序中的八位字节:

#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位整数并附加到一个向量是不可能的。

思想?

1 个答案:

答案 0 :(得分:0)

写入的代码应该读取16位值的数组。唯一的问题是它假定文件写入的字节顺序与读取时使用的字节顺序相同。无论是否是这种情况,问题都不清楚。在交换文件的情况下,例如在x86和Sparc机器之间,通常选择网络字节顺序并在读取时使用ntohs()处理值(写入时htons())。虽然它们看起来像功能,但它们通常只是宏,它们不会对使用网络字节顺序的平台上的值做任何事情。