2012-10-11 35 views
0

存储字节的不好方法:
我在文件中存储了大约一些字节。字节由任意位(1或0)组成。
约10个字节组成一个日志项目。我在的日志末尾添加'\ n'
后来我从文件中读取(文件以文本格式存储和读取)。
我发现日志的一些两个字节组成'\ n'(0x0d,0x0a)
但是我使用文件流的'readLine()'来读取文件的内容,这显然无法识别行的正确结尾。
我得到的结果是一个质量,但有没有更好的方法来存储字节(包含任意1或0)并从文件中读取?
我在qt中使用C++,如果可能的话,IDE下的解决方案应该更好。如何避免从文件中读取错误的' n'?

我的英文很差。感谢您的耐心阅读!

+2

混合二进制和文本听起来像是一个灾难的食谱给我。为什么不定义每次读取N个字节的固定格式? – ksming

回答

1

我怀疑你正在使用Windows,而你正在以文本模式写入并以二进制模式读取。

对于保存到文件系统的windows文本文件,在行尾应该有\ r \ n(0x0d,0x0a)。在文本模式下写入时,会自动添加\ r。在文本模式下阅读将删除\ r,所以你永远不应该看到它。

如果您以相同的模式(文本或二进制)读写,那么您将看到与您所写的相同的数据。在Linux上,文本模式和二进制模式没有区别,但你应该得到正确的模式,以保持你的代码的便携性。

如果这是一个二进制文件(听起来像你在写字节而不是字符串),那么你应该可能使用二进制模式读取和写入。

+0

在我的日志项目中,首先有一些字符串(其长度不确定),然后11个字节跟随字符串,如何存储和读取日志项目? ;) 谢谢阅读! – Al2O3

+0

有很多方法可以做到这一点。通常,每个字符串的末尾都会有一个分隔符。 \ 0例如由C/C++在内部使用。您可以使用任何其他不在数据本身中显示的分隔符。如果它出现在数据中,您可以将分隔符转义出来,或者在读取之前将字符串的长度写入文件。 – AutomatedMike

0

您可以使用special character来代替'0',然后将其存储到文件中并在该行的末尾添加'\n'。 试试这个,它可能有帮助。

相关问题