Я только что был полностью сбит с толку.Я искал несколько часов, почему я не могу преобразовать строку в PUCHAR (без знака char *).Это странно, но по какой-то причине методы шифрования окон принимают только PUCHAR ... (почему?)
Я нашел множество решений, но сначала они, кажется, не работают.Первые 128 символов из таблицы ASCII работали нормально, но другие символы, такие как 'ù' и 'µ', были преобразованы в другие (в основном странные символы ASCII, но всегда один и тот же символ для соответствующего заданного символа).
Я только что обнаружил, что приведение работает, но только для строк, которые читаются из консоли с использованием cin ?!Закодированные строки не работают ?!Я, честно говоря, не имею ни малейшего понятия о причине такого поведения.
Вот пример:
С CIN
cout << "With cin: ";
string password;
cin >> password;
unsigned char q = (unsigned char)password[0];
PUCHAR pbPassword = new unsigned char[1];
pbPassword[0] = q;
pbPassword[1] = NULL; //Null or garbage is printed
cout << pbPassword;
Это выводит:
С cin:
µ
µ
Без CIN
cout << "Without cin: ";
string password = "µ";
unsigned char q = (unsigned char)password[0];
PUCHAR pbPassword = new unsigned char[1];
pbPassword[0] = q;
pbPassword[1] = NULL;
cout << pbPassword;
Это выводит:
Without cin: ╡
Я начинающий программист, поэтому извините, если кодгрязный.
Хотя я использую тот же символ, приведение к жестко закодированной строке не работает.Даже при использовании точно такого же приведения.
Я также заметил, что я могу поместить символ в индекс 1, в то время как массив имеет длину только 1, что означает, что я обращаюсь к памяти, которую я на самом деле не должен,Как это возможно?Обычно это дает ошибку доступа к памяти некоторых типов, верно?
РЕДАКТИРОВАТЬ: Главный вопрос не в том, как привести, или почему я все еще могу поместить элементы в массив, даже если он имеет длину 1. Его почему cout даетразличные результаты для приведения из строки, прочитанной из cin и жестко закодированной строки.