CArchive (MFC) 到 JSON?

Posted

技术标签:

【中文标题】CArchive (MFC) 到 JSON?【英文标题】:CArchive (MFC) to JSON? 【发布时间】:2015-04-10 05:23:21 【问题描述】:

我必须从服务器接收数据。服务器的应用程序是用 VS2008 (MFC) 编写的。只有一种方法可以从服务器 -> 作为 CArchive 对象发送此数据。我无法更改服务器源。

我想在 php 中(通过 tcp)接收这些数据,并将它们转换为 JSON。将CArchive转换为JSON有什么聪明的方法吗?

【问题讨论】:

没有“CArchive 格式”,格式完全取决于您的软件写入的内容。您必须编写能够理解您的 CArchive 格式的 PHP 代码,然后将其转换为 JSON 或其他格式。 【参考方案1】:

CArchive 没有您可以解析的预定义格式。它只是一个依赖于应用程序的二进制文件。你必须知道里面有什么才能知道如何阅读它。库可以使读取某些数据类型(CStringCArray 等)变得更容易,但我不确定你会找到这样的东西。

以下示例显示了CArchive 的工作原理(存储部分):

CArchive ar;
int i = 500;
float f = 10.4f;
CString str(_T("string"));
ar << i << f << str;

因此,您必须读取二进制数据并以某种方式对其进行解释。这在 C++ 中很容易,因为 MFC 框架确切地知道如何序列化类型,包括像 CStringCArray 这样的复杂类型。但您必须使用 PHP 自行完成。

例如,您可能会在指定偏移处读取 4 个字节并将其解释为 intfloat 的后四个字节。然后你必须看看如何加载CString,它先存储长度,然后存储数据,但你必须看看它使用的确切格式。

没有现成/使用的CArchive -> JSON 转换器。我建议您修改服务器代码以生成 CArchiveJSON 数据。

【讨论】:

以上是关于CArchive (MFC) 到 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

MFC文件的读写操作,类的序列化与反序列化,CFile,CFileDialog,CArchive,CStdioFile

如何获取 CArchive 中引用的文件的大小?

我可以重载 CArchive << 运算符以使用 std::string 吗?

MFC总结:MFC中文件操作查找与选择总结

C# 中的 MFC 对象序列化

读取使用 CArchive Ar(&SaveDataStoreDetail, CArchive::store) 存储的数据;