我需要将字节写入文件。字节的自然表示是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
最初包含的位模式相同。
我需要确保这适用于编译器和操作系统,因此如果我在一台计算机上写东西,它将在任何其他计算机上读取相同的内容。
有没有符合标准的方法呢?
答案 0 :(得分:1)
从unsigned char
转换为char
并返回完全正常,这正是您应该做的事情。所有三种char类型都是布局兼容的。
您只需要小心使用任何非字符整数类型,然后在转换为uint8_t
等之前将其转换为char
,并在其他方向进行类似转换。