如果您使用的是未格式化的输入,则应该直接以二进制形式读取。通常你会使用一些编译器特定的指令来创建没有填充的数据结构,然后从文件中读/写。
// Gcc
#pragma pack(1) // option 1: pragmas
struct frame {
std::uint32_t header;
std::uint16_t data[8];
} __attribute((packed)); // option 2: packed attribute
#pragma pack(0)
bool operator==(data const & lhs, data const & rhs)
{
bool result = lhs.header == rhs.header;
for (int i = 0; i < 8; ++i)
{
result &= lhs.data[i] == rhs.data[i];
}
return result;
}
int main()
{
frame data = { 10, 1, 2, 3, 4, 5, 6, 7, 8 };
std::ofstream out("data.bin", ofstream::binary);
out.write(reinterpret_cast<char*>(&data), sizeof(data));
out.close();
std::ifstream in("data.bin", ifstream::binary);
frame readed;
in.read(reinterpret_cast<char*>(&readed), sizeof(readed));
in.close();
std::cout << (readed == data) << std::endl; // 1
}
的编译器指令禁用填充为VS可能是不同的(我相信编译指令都在GCC和VS的作品,但我一直使用的属性)。
您想要格式化输入(文本格式)还是从数据的二进制表示中读取(字段名称看起来像是消息) – 2009-08-31 22:51:16
表示的数据是二进制的。每个数据包以标题序列开始并包含8个数据样本。我想将其转换成8个样本流。那些可以在另一个进程中使用或写入二进制文件。 – HazyBlueDot 2009-08-31 23:26:37