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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
артист
3 / 5 / 4
Регистрация: 17.09.2014
Сообщений: 706
Завершенные тесты: 1
#1

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

26.12.2015, 17:26. Просмотров 249. Ответов 13
Метки нет (Все метки)

Найти не могу нигде...

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



Получаю из 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];
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2015, 17:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразовать массив LPWSTR в массив BYTE (C++):

Преобразовать string в массив byte[] - C++
Привет. У меня есть строка к примеру &quot;test&quot; в ней 4 байта? Перевести ее в unsigned char это просто каждый символ занести а массив? { 't',...

Fopen: невозможно преобразовать параметр 1 из 'LPWSTR' в 'const char *' - C++
#include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include&lt;cstdio&gt; #include&lt;io.h&gt; int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE...

Как преобразовать массив в динамический? Массив вычисляет сумму элементов каждой диагонали матрицы - C++
Ошибка : Вызвано исключение по адресу 0x00BB2F4F в Проект6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE05. #...

Задан массив из k символов. Преобразовать массив следующим образом: расположить символы в обратном порядке - C++
Задан массив из k символов. Преобразовать массив следующим образом: расположить символы в обратном порядке. Только начали изучать С++,...

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++
1. Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент. (Серия - группа подряд идущих...

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++
Помогите преобразовать код из языка С# в С++. Занимался разбором задачи на языке С++. Вот условие задачи: Дан целочисленный массив...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
26.12.2015, 17:33 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Строка из двухбайтных элементов состоит. Как именно ты хочешь в BYTE-ный массив это преобразовать?
1
артист
3 / 5 / 4
Регистрация: 17.09.2014
Сообщений: 706
Завершенные тесты: 1
26.12.2015, 17:40  [ТС] #3
Не знаю
А BYTE это же unsigned long - он больше чем wchar_t.
Нули наверное поставятся...
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
26.12.2015, 17:47 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от артист Посмотреть сообщение
А BYTE это же unsigned long
Где ты это взял? BYTE - unsigned char.
Здесь читай: https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
1
артист
3 / 5 / 4
Регистрация: 17.09.2014
Сообщений: 706
Завершенные тесты: 1
26.12.2015, 19:15  [ТС] #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];
}
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
26.12.2015, 19:59 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цель-то какая? Используй тогда массив с удвоенным количеством элементов (байтов), и копируй каждый wchar_t в два BYTE.

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

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

Теперь всё ясно...
Надо wchar_t юзать 100%, а то китайские пароли не будет поддерживать.
0
артист
3 / 5 / 4
Регистрация: 17.09.2014
Сообщений: 706
Завершенные тесты: 1
26.12.2015, 21:06  [ТС] #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);
Хотел узнать сколько памяти надо выделить, чтоб нуль терминатор не записался...
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
26.12.2015, 22:49 #11
LPCWSTR - это (wchar_t *). А просто wchar_t - это WCHAR. Читай ту статью ещё раз.
Тебе нет смысла ради таких коротких строк использовать new, объявляй массивы WCHAR.
1
артист
3 / 5 / 4
Регистрация: 17.09.2014
Сообщений: 706
Завершенные тесты: 1
26.12.2015, 22:59  [ТС] #12
А звёздочка это значит const или что содержит нуль терминатор?
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
26.12.2015, 23:00 #13
Это значит указатель.
1
артист
3 / 5 / 4
Регистрация: 17.09.2014
Сообщений: 706
Завершенные тесты: 1
26.12.2015, 23:13  [ТС] #14
Ладно, потом погуглю про все эти переменные, структуры, звёздочки и &, а то чем больше ответов, тем больше вопросов
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2015, 23:13
Привет! Вот еще темы с ответами:

Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { int n; int k=0; int p=0; int l=0; int...

Преобразовать массив следующим образом: сначала должны стоять цифры, входящие в массив, а затем все остальные символы - C++
помогите пожайлуста с задачей. Задан массив из k символов. Преобразовать массив следующим образом: сначала должны стоять цифры,...

Как преобразовать все int,float,double в строки LPWSTR, LPCTSTR - C++
Столкнулся с проблемой не как не переведу в нормальный вид вот код #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include...

Дан двумерный массив. Преобразовать его так, чтобы новый массив содержал элементы старого, циклически сдвинутые на 2 элемента влево. - C++
Уважаемые форумчане, такая проблема, не знаю как решить задачу, в моём городе мне не к кому обратиться с ней, все либо уже забыли либо...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.12.2015, 23:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru