c++ - 在 xml 中存储 C++ 二进制输出

标签 c++ xml

根据 xsd,支持的二进制类型是 hexbinary 和 base64 编码的二进制数据。 http://www.w3schools.com/schema/schema_dtypes_misc.asp

我的目的是从内存中读取原始字节内容并将其序列化为 xml 文件。因此,上面哪种数据类型将描述原始字节内容,或者我是否必须确保将原始字节内容转换为十六进制以符合上述 2 种数据类型之一?

最佳答案

您必须将原始二进制文件转换为十六进制(或 base64)表示形式。例如,如果字节的值为 255(十进制),则它的十六进制表示(作为字符串)将为“ff”。

用于存储原始输入的(常规)类型是 unsigned char,因此您可以轻松地逐字节获取 0-255 的范围,但是对于该数组的每个字节,您需要在一个 signed char 中有两个字节(或 std::string) 类型来存储表示,这就是您在 XML 中使用的内容。

您的框架可能有一种将原始字节转换为 Base64 或十六进制的方法。如果没有,这里是十六进制的一种方法:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main (void) {
    ostringstream os;
    os.flags(ios::hex);

    unsigned char data[] = { 0, 123, 11, 255, 66, 99 };

    for (int i = 0; i < 6; i++) {
        if (data[i] < 16) os << '0';
        os << (int)data[i] << '|';
    }

    string formatted(os.str());

    cout << formatted << endl;

    return 0;
}          

输出:00|7b|0b|ff|42|63|

关于c++ - 在 xml 中存储 C++ 二进制输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10335979/

相关文章:

regex - 结合删除标签正则表达式和删除 sed 中的空行 - Unix

xml - 获取服务器响应 500(内部服务器错误)的 xml 内容

c++ - 如何构建在所有机器上表现相同的 exe

c++ - 仅禁用 QTreeWidget 中的一项

c++ - 删除静态 vector 中的唯一类对象指针

c# - 将 XML 转换为对象

c++ - 可视化代码流的工具 (C/C++)

c++ - 带有 IWebBrowser 组件的 CDialog,退格键不起作用

xml - 从文本文件中提取数据并输出 xml 文件

c# - Xamarin 安卓 C# : Using the xml resource folder and manifest to define an intent filter for detecting connected usb devices crashs application