Форум программистов, компьютерный форум CyberForum.ru

Преобразовать массив LPWSTR в массив BYTE - C++

Восстановить пароль Регистрация
 
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 561
Завершенные тесты: 1
26.12.2015, 17:26     Преобразовать массив LPWSTR в массив BYTE #1
Найти не могу нигде...

На С# только нашел, и то не то...



Получаю из EDIT текст:
C++
1
2
LPWSTR keyT = (LPWSTR)malloc(32 + 1 * sizeof(LPWSTR));
GetWindowTextW(hEdit[1], keyT, 32 + 1);
И мне как - то нужно запихать его в этот массив, без нуль терминатора.
C++
1
BYTE key[32];
Блин не понимаю в чём разница между ними...

C++
1
for (int i = 0; i < 32; ++i) key[i] = (BYTE)keyT[i];
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4298 / 3719 / 1252
Регистрация: 14.04.2014
Сообщений: 14,542
26.12.2015, 17:33     Преобразовать массив LPWSTR в массив BYTE #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Строка из двухбайтных элементов состоит. Как именно ты хочешь в BYTE-ный массив это преобразовать?
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 561
Завершенные тесты: 1
26.12.2015, 17:40  [ТС]     Преобразовать массив LPWSTR в массив BYTE #3
Не знаю
А BYTE это же unsigned long - он больше чем wchar_t.
Нули наверное поставятся...
nmcf
4298 / 3719 / 1252
Регистрация: 14.04.2014
Сообщений: 14,542
26.12.2015, 17:47     Преобразовать массив LPWSTR в массив BYTE #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от артист Посмотреть сообщение
А BYTE это же unsigned long
Где ты это взял? BYTE - unsigned char.
Здесь читай: https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 561
Завершенные тесты: 1
26.12.2015, 19:15  [ТС]     Преобразовать массив LPWSTR в массив BYTE #5
В подсветке увидел, перепутал...

Ну вот 1 байт это 8 бит = 00000000

char - 1 байт
whar_t - 2 байта
unsigned char - 1 байт

Я получаю текст в 2х байтовые эти...ячеки...

Буква а русская выглядит так в ANSI:
224 (11100000)
Записывается в whar_t походу так(как и все другие символы (0-255)):
11100000 00000000

Так в UTF-8:
80, 176 (11010000 10110000)
записывается в whar_t:
11010000 10110000

А в unsigned char нужно разбить whar_t на составляющие...

А может проще читать в char...
Только не знаю, русские буквы определятся, или нет...

Добавлено через 14 минут
Может можно типа такого?
C++
1
2
3
4
5
6
7
8
LPWSTR tKey[20]
BYTE bKey[sizeof(tKey) * 2]
 
for(int j = 0, i = 0; i < sizeof(tKey); ++i)
{
    bKey[j++] = tKey[i][0];
    bKey[j++] = tKey[i][1];
}
nmcf
4298 / 3719 / 1252
Регистрация: 14.04.2014
Сообщений: 14,542
26.12.2015, 19:59     Преобразовать массив LPWSTR в массив BYTE #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цель-то какая? Используй тогда массив с удвоенным количеством элементов (байтов), и копируй каждый wchar_t в два BYTE.

Добавлено через 4 минуты
C++
1
2
3
WCHAR tKey[20];
BYTE bKey[40];
std::copy(tKey, tKey + 20, reinterpret_cast<WCHAR *>(bKey));
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 561
Завершенные тесты: 1
26.12.2015, 20:02  [ТС]     Преобразовать массив LPWSTR в массив BYTE #7
Цель - передать пароль из формы в AES шифровальщик )
nmcf
4298 / 3719 / 1252
Регистрация: 14.04.2014
Сообщений: 14,542
26.12.2015, 20:03     Преобразовать массив LPWSTR в массив BYTE #8
Ну вот так и передавай.
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 561
Завершенные тесты: 1
26.12.2015, 20:42  [ТС]     Преобразовать массив LPWSTR в массив BYTE #9
Попробовал читать в char и вывести в messagebox - русский нормально отображается...
А вот китайский не вывело...
Преобразовать массив LPWSTR в массив BYTE

А в wchar_t вывело:
Преобразовать массив LPWSTR в массив BYTE

Теперь всё ясно...
Надо wchar_t юзать 100%, а то китайские пароли не будет поддерживать.
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 561
Завершенные тесты: 1
26.12.2015, 21:06  [ТС]     Преобразовать массив LPWSTR в массив BYTE #10
Блин да что за дебилы понасоздавали этих приставок чёртовых.
Ни - то, ни сё не работает.

Ведь LPCWSTR это и есть wchar_t...
LPCWSTR
Указатель на постоянную строку с нулевым символом в конце 16-разрядных символов Unicode. Для получения дополнительной информации см Наборы символов, используемые шрифты.
Этот тип объявлен в WinNT.h следующим образом:
определение типа во ФИКС WChar * LPCWSTR;

WCHAR
16-битный Unicode символов. Для получения дополнительной информации см Наборы символов, используемые шрифты.
Этот тип объявлен в WinNT.h следующим образом:
ЬурейеЕ wchar_t WCHAR;
C++
1
2
3
4
5
wchar_t text = (wchar_t)malloc(eLen[0] + 1 * sizeof(wchar_t));
 
swprintf_s(&text, sizeof(text), L"%i %i", eLen[0], sizeof(text));
 
MessageBoxW(hWnd, (LPCWSTR)text, L"ert", 0);
C++
1
2
3
4
5
LPCWSTR text = (LPCWSTR)malloc(eLen[0] + 1 * sizeof(LPCWSTR));
 
swprintf_s((wchar_t *)text, sizeof(text), L"%i %i", eLen[0], sizeof(text));
 
MessageBoxW(hWnd, (LPCWSTR)text, L"ert", 0);
Хотел узнать сколько памяти надо выделить, чтоб нуль терминатор не записался...
nmcf
4298 / 3719 / 1252
Регистрация: 14.04.2014
Сообщений: 14,542
26.12.2015, 22:49     Преобразовать массив LPWSTR в массив BYTE #11
LPCWSTR - это (wchar_t *). А просто wchar_t - это WCHAR. Читай ту статью ещё раз.
Тебе нет смысла ради таких коротких строк использовать new, объявляй массивы WCHAR.
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 561
Завершенные тесты: 1
26.12.2015, 22:59  [ТС]     Преобразовать массив LPWSTR в массив BYTE #12
А звёздочка это значит const или что содержит нуль терминатор?
nmcf
4298 / 3719 / 1252
Регистрация: 14.04.2014
Сообщений: 14,542
26.12.2015, 23:00     Преобразовать массив LPWSTR в массив BYTE #13
Это значит указатель.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2015, 23:13     Преобразовать массив LPWSTR в массив BYTE
Еще ссылки по теме:

Преобразовать string в массив byte[] C++
Из Variant получить массив Byte C++
Преобразовать BYTE в HEX C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 561
Завершенные тесты: 1
26.12.2015, 23:13  [ТС]     Преобразовать массив LPWSTR в массив BYTE #14
Ладно, потом погуглю про все эти переменные, структуры, звёздочки и &, а то чем больше ответов, тем больше вопросов
Yandex
Объявления
26.12.2015, 23:13     Преобразовать массив LPWSTR в массив BYTE
Ответ Создать тему
Опции темы

Текущее время: 00:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru