高效二进制流
Efficient Binary Streaming
我希望将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位整数并附加到一个向量将是不可能的。
想法吗?
所写的代码应该读取一个16位值的数组。唯一的问题是,它假设写入文件时使用的字节顺序与读取文件时使用的字节顺序相同。从这个问题来看,情况是否如此还不清楚。在文件交换的情况下,例如在x86和Sparc机器之间,您通常选择网络字节顺序并在读取时使用ntohs()
处理值(在写入时使用htons()
)。虽然这些看起来像函数,但它们通常只是宏,在使用网络字节顺序的平台上对值不做任何事情。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- C++中高效的大型稀疏块压缩线性方程
- 有根的二进制搜索树.保留与其父级的链接
- 多态二进制函数
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 正在读取二进制文件(is_open)
- visual在c++中将十进制数转换为二进制数
- C++十进制到二进制,如何转换
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为什么二进制搜索在我的测试中不起作用
- 重载==不适用于二进制树
- 正在尝试重载二进制搜索树分配运算符
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何在C++中高效地构造随机骰子
- 大多数基本类型的高效二进制序列化
- 高效实现二进制搜索
- 如何在c++中高效地从结构复杂的文件中读取二进制数据
- 高效二进制流