3

我需要将字节写入文件。一个字节的自然表示是std::uint8_t. 问题是istream.read()和sostream.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最初包含的位模式相同。

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

有没有符合标准的方法来做到这一点?

4

1 回答 1

1

来回转换非常unsigned charchar,这正是您应该做的。所有三种字符类型都是布局兼容的。

您只需要小心任何非 char 整数类型,uint8_t然后在转换为 之前将它们转换为 first char,等等,在另一个方向上也是如此。

于 2013-07-05T18:57:35.400 回答