在.net中,我想解码一些由C++应用程序编码的原始数据。C++应用程序是32位的,C#应用程序是64位的。C++应用程序支持俄语和西类牙语字符,但不支持unicode字符。此C#二进制阅读器无法读取俄语或西类牙语字符,并且仅适用于英语ascii字符。CArchive没有指定任何编码,我不确定如何从C#中读取它。我已经针对几个简单的字符串测试了这个,这是C++CArchive提供的:对于“ABC”:“03414243”对于“ÁåëÀÇ7555”:“0BC1E5EBC0C72037353535C2”下面展示了C++应用程序如何写入二进制文件。voidCColumnDefArray::Se
我正在尝试用C#读入一个用CArchive编写的文件。据我所知,格式是:[下一组数据的长度][数据]...等不过,我对某些数据仍然很模糊。如何读取日期数据?float、整数、double等怎么样?此外,[下一组数据的长度]可以是字节或字或双字。我怎么知道它们分别是什么时候?例如,对于字符串“1.10”,数据是:04312e313004显然是长度,其余的是1.10的十六进制值。琐碎的。后来我有一个41个字符长的字符串,但[length]值为:00000029为什么长度是4个字节?(0x29=41)主要问题是:是否有CArchive输出格式的规范? 最佳答案
我在我的MFC应用程序中使用std::string,我想将它存储在文档的Serialize()函数中。我不想将它们存储为CString,因为它在那里写了自己的东西,我的目标是创建一个我知道其格式并且可以被其他应用程序读取而无需CString的文件。所以我想将我的std::strings存储为4字节(int)字符串长度,后跟包含该字符串的该大小的缓冲区。voidCMyDoc::Serialize(CArchive&ar){std::stringtheString;if(ar.IsStoring()){//TODO:addstoringcodehereintsize=theString.s
我需要把一个map的内容(key是int的ID,value是自定义的struct)写入一个文件,稍后从文件中加载。我可以在带有CArchive的MFC中完成吗?谢谢! 最佳答案 在MFC中,我认为最简单的方法是首先序列化map的大小,然后简单地遍历所有元素。你没有指定你使用的是std::map还是MFC的CMap,但是基于std::map的版本可以看起来像这样:voidMyClass::Serialize(CArchive&archive){CObject::Serialize(archive);if(archive.IsStori
我正在使用MFC的CArhive类来保存我的应用程序的项目文件。其中一个类名非常不准确,我想更改它,但是简单地在各处更改名称会使以前的存档文件无用并出现存档错误。有没有一种方法可以更改存档类的名称而不会使所有以前保存的文件变得无用?这当然是在不使用typedef以新名称访问现有类或保留具有旧名称的类版本以读取存档文件并将读取的对象复制到具有新名称的同一类的情况下. 最佳答案 关键点是,当您使用DECLARE_SERIAL和IMPLEMENT_SERIAL时,一个CRuntimeClass成员被添加到您的类中,其中包含其中的名称cod