Я пытаюсь использовать memcpy для преобразования массива TCHAR в массив BYTE, но функция memcpy копирует только 1 TCHAR из массива tchar в байтовый массив.
Я понятия не имею, почему это происходит.
Вот фрагмент кода.
TCHAR test[] = L"This is a test string, its purpose is to do some testing!";
DWORD testSizeBytes = sizeof(TCHAR) * lstrlen(test);
LPBYTE byteArray = new BYTE[testSizeBytes+1];
memcpy(byteArray,test,testSizeBytes);
Если бы я использовал этот фрагмент, byteArray просто содержал бы ‘T’;
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: я исправил проблему (это была опечатка). Код, который я здесь написал, работает без нареканий. Мой компилятор находится в Windows VM, поэтому мне пришлось перепечатать его здесь и по незнанию исправить опечатку.
TCHAR test[] = L"This is a test string, its purpose is to do some testing!";
Это широкий характер (wchar_t
) строка На Windows, с UNICODE
определил, что это UTF-16. В UTF-16 персонаж 'T'
составляет 2 байта. Первый байт соответствует значению ASCII 'T'
(десятичное число 84). Второй байт равен 0. Поэтому, когда вы копируете это в свой байтовый массив, это выглядит как завершенная нулем c-строка с 1 символом. Другие символы есть, но они идут после конца видимой c-строки, поэтому ваш отладчик, по-видимому, игнорирует их.
Как упоминалось в комментарии от ajshort, ваш отладчик, вероятно, не осознает, что вы имеете дело с массивом.
Если вы можете использовать свой отладчик для просмотра памяти, попробуйте посмотреть на место в памяти byteArray + 1
а также byteArray + 2
, так далее.
Я не на Windows, поэтому я не могу сказать вам, как это сделать, но эквивалент gdb
команда будет x byteArray + 1
,