バイナリデータを含む文字列があります。xml 形式の文字列なので、処理する前にバイナリ データを base64 形式に変換する必要があります。私は findXMLTag と呼ばれる関数を使用しています。これは、データを含む xml タグを指定して、データの開始位置と終了位置を見つけます。そのデータを base64 に変換できるようになりましたが、古いバイナリ データを新しい base64 データに置き換えるのに問題があります。
問題は、ヌル文字を見つけると文字列の終端と見なされるため、どのタイプの文字列も使用できないことですが、実際には文字列にバイナリデータが格納されているため、そのヌル文字が一部になる可能性があります私のバイナリデータの。
だから私はある種のバイナリ置換を探していると思いますが、それを機能させる方法がわかりません。どんな種類の助けにも感謝します。
これは、xml 文字列内のデータの開始と終了を見つけるために使用しているコードです。
std::vector<TForm1::Pair> TForm1::findXMLTag(char *XMLString, char* XMLTag, int XMLSize)
{
void *found = XMLString;
int XMLTagLen = strlen(XMLTag);
std::vector<TForm1::Pair> result;
TForm1::Pair pair;
AnsiString XMLTagEnd = "</";
XMLTagEnd += &XMLTag[1];
while(found = memmem(XMLString, XMLSize - ((char*)found - XMLString), XMLTag, XMLTagLen))
{
if(found == NULL)
return result;
found = (char*)found + XMLTagLen;
pair.start = int((char*)found - XMLString);
found = memmem(found, XMLSize - ((char*)found - XMLString), XMLTagEnd.c_str(), XMLTagEnd.Length());
pair.end = int((char*)found - XMLString);
found = (char*)found + XMLTagEnd.Length();
result.push_back(pair);
}
return result;
}