是否有内置方法来确保C ++流中多字节类型的字节序?特别是,我想使用read()
和write()
来读取/写入流中的小字符数组。我需要确保它们始终以little-endian格式存储。 (是的,我可以一次一个字节或者移动等等,但这不是我的问题。)
答案 0 :(得分:1)
对于char数组,您不需要担心字节序,因为每个字符都是单个字节。如果你将整数这样的东西编码为一系列字节,那么你的流需要不是作为一个char数组进行读写,而是作为一个类型化的数组,这样你才能知道你在处理什么。也就是说,当你将整数转换为字节时,你已经失去了恢复字节序所需的信息。
答案 1 :(得分:0)
没有办法保证这一点。我很确定这是由架构决定的,而不是编译器。但是,有一些方法可以检查字节顺序。
在您的特定情况下,实际上并不担心,因为据我所知,C ++的每个严格实现都将char
存储为单个字节。
答案 2 :(得分:0)
由于在没有移位的情况下无法做到这一点 - 架构将迫使您在使用它时按照内存中的特定顺序使用它们 - 最简单的解决方法是使用字节顺序标记。如果这是不可接受的,我担心你必须轮班。
要检查您的假设是否正确,您可以说
之类的内容static_assert(sizeof(char) == 1, "Chars are not one byte!!!!????");
答案 3 :(得分:0)
对于字符数组,"其他人所说的"。
对于更复杂的数据类型,请查看现有的序列化项目,而不是自己滚动。在撰写本文时,谷歌的protobuf似乎不是一个糟糕的选择。
答案 4 :(得分:0)
此函数可以简单地检查系统的字节顺序:
{{1}}