基本上我有
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 - 要跟随的字符串的大小
0032002E0030002F00530065007200610074006F002000530063007200610074006300680020004C004900560045002000440061007400610065字符串-2006100730
该字符串每个字符使用 16 个字节,因此我不能将 char * 用于实际字符串,wchar_t 似乎是最好的选择。
但是,当我将这些字节存储到 wchar_t 时,我在 cout 中得到 0x7fe7abc037e0,我认为这是一个指针?
这似乎是错误的。当我使用 wcout 时,我在终端中什么也得不到。
memcpy 不会为此工作吗?
我的 wchar_t 大小也应该减半,因为我的 wchar_t 数量只有我拥有的字符的一半吗?
size 是字节数。