安全地将字节写入流

时间:2013-07-05 18:39:05

标签: c++ char iostream

我需要将字节写入文件。字节的自然表示是std::uint8_t。问题是istream.read()ostream.write()char一起使用。我可以在两种类型之间进行转换,例如:

char c;
input.read(&c, 1);
uint8_t b = (uint8_t)c;
uint8_t b = …;
char c = (char)b;
output.write(&c, 1);

这可能是一个问题,因为char通常是签名类型,而AFAIK无法保证所写的位模式与int8_t最初包含的位模式相同。

我需要确保这适用于编译器和操作系统,因此如果我在一台计算机上写东西,它将在任何其他计算机上读取相同的内容。

有没有符合标准的方法呢?

1 个答案:

答案 0 :(得分:1)

unsigned char转换为char并返回完全正常,这正是您应该做的事情。所有三种char类型都是布局兼容的。

您只需要小心使用任何非字符整数类型,然后在转换为uint8_t等之前将其转换为char,并在其他方向进行类似转换。