0

我有一些使用 ReadStr 和 WriteStr 的代码,我认为是将字符串写入二进制文件。

文档中对 WriteStr 的解释指出,它将以 AnsiString 的形式将原始数据写入对象的流,这是有道理的。但随后 ReadStr 说它读取了一个字符。那么它们不是彼此对立的吗?

假设我有,

pName: String[80];

我在上面使用了 WriteStr,它实际上写了什么?由于 WriteStr 需要 AnsiString,它是否将 pName 转换为这样?在这种情况下,它是否不会将“长度”字段写入流中,因为 AnsiString 指针指向第一个元素而不是长度字段?我也在寻找,这些天似乎 String == AnsiString,但我关于长度字段的问题仍然保持不变。

如果假设它没有将 Length 字段写入文件,它是否仍然在数据末尾写入 NULL?因此,我可以通过查找“\0”来找到字符串的结尾吗?ReadStr 是否读取到 NULL 字符?

非常感谢你 :)

4

1 回答 1

3

在您的预Unicode 版本的Delphi 中,WriteStr写入ReadStr和读取一个AnsiString值。编写代码写入长度,然后写入字符串内容。读取代码读取长度,分配字符串,然后用内容填充它。

ReadStr当您将结果分配给 80 个字符的短字符串时,这可能会涉及截断。

于 2013-06-19T06:30:57.090 回答