基本的に私は持っています
void FileReader::parseBuffer(char * buffer, int length)
{
//start by looking for a vrsn
//Header seek around for a vrns followed by 32 bit size descriptor
//read 32 bits at a time
int cursor = 0;
char vrsn[5] = "vrsn";
cursor = this->searchForMarker(cursor, length, vrsn, buffer);
int32_t size = this->getObjectSizeForMarker(cursor, length, buffer);
cursor = cursor + 8; //advance cursor past marker and size
wchar_t *version = this->getObjectForSizeAndCursor(size, cursor, buffer);
cout << version << "\n";
delete[] version;
}
wchar_t* FileReader::getObjectForSizeAndCursor(int32_t size, int cursor, char *buffer) {
wchar_t *destination = NULL;
destination = new wchar_t[(size/2)+1];
memcpy(destination, buffer + cursor, size);
return destination;
}
私の例では、次のバイトがあると言います
7672736E-マーカーvrsn
00000040-従う文字列のサイズ
0032002E0030002F00530065007200610074006F002000530063007200610074006300680020004C004900560045002000440061007400610062006100730065-文字列
文字列は1文字あたり16バイトを使用するため、実際の文字列にchar *を使用することはできません。これは、wchar_tが最善の策のようです。
ただし、これらのバイトをwchar_tにmemcpyすると、coutで0x7fe7abc037e0が取得されます。これは、ポインターであると想定していますか?
これは間違っているようです。wcoutを使用すると、ターミナルに何も表示されません。
memcpyはこれでは機能しませんか?
また、wchar_tの数はcharの半分しかないため、wchar_tのサイズを半分にする必要がありますか?
サイズはバイトカウントです。