0

xsdによると、サポートされているバイナリタイプはhexbinaryおよびbase64でエンコードされたバイナリデータです。http://www.w3schools.com/schema/schema_dtypes_misc.asp

私の意図は、メモリから生のバイトの内容を読み取り、それをxmlファイルにシリアル化することです。したがって、上記のどのデータ型が生のバイトの内容を記述しますか、それとも、上記の2つのデータ型のいずれかに準拠するために生のバイトの内容が16進数に変換されていることを確認する必要がありますか?

4

2 に答える 2

3

生のバイナリを16進数(またはbase64)表現に変換する必要があります。たとえば、バイトの値が255(10進数)の場合、(文字列としての)16進表現は「ff」になります。

生の入力を格納するために使用する(従来の)タイプはunsigned charであるため、0〜255の範囲をバイトごとに簡単に取得できますが、その配列の各バイトには、signed char(またはstd: :string)タイプを使用して表現を格納します。これは、XMLで使用するものです。

フレームワークには、生のバイトをBase64または16進数に変換する方法がある可能性があります。そうでない場合は、hexの1つの方法を次に示します。

#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 |

于 2012-04-26T14:59:12.257 に答える
1

生データを2つのデータ型のいずれかにエンコードする必要があります。これは、ランダムなデータがXML形式を台無しにするのを防ぐためです。たとえば<、データのどこかに埋め込まれている場合などです。

2つのうちどちらが最も便利かを選択できます。16進型はコードの記述が簡単ですが、ファイルが大きくなります。出力バイトと入力バイトの比率は2:1で、Base64エンコーディングの場合は4:3です。ただし、独自のコードを作成する必要はありません。Base64変換関数はすぐに利用できます。回答にいくつかのコードが含まれている質問があります:Cでbase64エンコード(デコード)するにはどうすればよいですか?

コーディングの違いの例として、「」というフレーズがThe quick brown fox jumps over the lazy dog.両方の方法でエンコードされています。

六角:

54686520717569636b2062726f776e20666f78206a756d7073206f76657220746865206c617a7920646f672e

Base64:

VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4=
于 2012-04-26T15:20:19.437 に答える