C++ 安全地将字节写入流

C++ 安全地将字节写入流,c++,char,iostream,C++,Char,Iostream,我需要将字节写入文件。字节的自然表示法是std::uint8\u t。问题是istream.read()和ostream.write()与chars一起工作。我可以在两种类型之间转换,例如: char c; input.read(&c, 1); uint8_t b = (uint8_t)c; 这可能是一个问题,因为char通常是有符号类型,而且无法保证写入的位模式与int8\t最初包含的相同 我需要确保它能跨编译器和操作系统工作,这样,如果我在一台计算机上写东西,它将在任何其他计算机上

我需要将字节写入文件。字节的自然表示法是
std::uint8\u t
。问题是
istream.read()
ostream.write()
char
s一起工作。我可以在两种类型之间转换,例如:

char c;
input.read(&c, 1);
uint8_t b = (uint8_t)c;
这可能是一个问题,因为
char
通常是有符号类型,而且无法保证写入的位模式与
int8\t
最初包含的相同

我需要确保它能跨编译器和操作系统工作,这样,如果我在一台计算机上写东西,它将在任何其他计算机上被读取


有什么符合标准的方法可以做到这一点吗?

无符号字符
字符
再转换回来非常好,这正是您应该做的。这三种字符类型都与布局兼容


您只需小心处理任何非字符整数类型,并在转换为
char
等之前,先将其转换为
uint8\t
,然后再转换为
char
,类似地,在另一个方向上。使用
std::basic\u istream
如何,等等?试着使用
操作符>
操作符,这是否意味着如果
字符
有符号,就保证使用两个补码?@svick:这两个都不是,但都不是需要担心的问题。
uint8_t b = …;
char c = (char)b;
output.write(&c, 1);