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);