gpt4 book ai didi

c++ - 在 MFC 中序列化为 Unicode 文本文件 - 错误的文件头

转载 作者:行者123 更新时间:2023-11-30 03:47:34 28 4
gpt4 key购买 nike

我正在尝试序列化一个对象列表。对象本身只包含 CString 成员。对文本文件进行序列化以创建人类可读的日志文件。问题是为了编写 Unicode 字符串,文件需要具有用于 Unicode 编码的 BOM(字节顺序标记)。

FILE *fStream = NULL;

VERIFY( _tfopen_s( &fStream, _T( "D:\\Test.txt" ), _T( "wt,ccs=UNICODE" ) ) == 0 );

CStdioFile theFile;

theFile.m_pStream = fStream;

CArchive archive( &theFile, CArchive::store );

ListContainingObject.Serialize( archive );

Serialize() 中,我尝试写入元素的数量,以便使用列表的大小调用 CArchive::WriteCount()。这会弄乱 BOM,如果文件是在记事本中打开的,例如,- 符号显示在文件的开头。

在 HEX 查看器中,文件头如下所示:ff fe 06 00。我知道 06 是我写的列表的容量。我也知道 - 的 ASCII 值可能是 ff fe 06 00 问题是:

有什么方法可以让我在文件的开头写下一个整数,而不用字节顺序标记把它弄乱,这样文本编辑器中就不会显示任何符号了吗?

最佳答案

哦,这一切都将变得一团糟。如果您序列化 CString 对象,它们也会像列表一样写入长度计数。

如果您只有一个字符串列表,则使用 wsprintf() 或 CString::Format() 将计数转换为字符串...将计数写为字符串并以换行符 ("\n").将所有剩余的字符串写成以换行符结尾的字符串。如果您的字符串中有换行符,那么您将不得不以某种方式将其转义。您可以将数据放入某种 XML 格式。您有很多选择。

关于c++ - 在 MFC 中序列化为 Unicode 文本文件 - 错误的文件头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654384/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com