Как я могу конвертировать 0x70, 0x61, 0x73 ... и т. Д. В Pas ... и т. Д. В C ++? - PullRequest
0 голосов
/ 29 сентября 2011

Я использую MSVC ++ 2010 Express, и я хотел бы знать, как преобразовать

BYTE Key[] = {0x50,0x61,0x73,0x73,0x77,0x6F,0x72,0x64};

в «Пароль». У меня много проблем с этим.:( Я буду использовать эти знания, чтобы взять такие вещи, как ...

BYTE Key[] { 0xC2, 0xB3, 0x72, 0x3C, 0xC6, 0xAE, 0xD9, 0xB5, 0x34, 0x3C, 0x53, 0xEE, 0x2F, 0x43, 0x67, 0xCE };

и другие различные переменные, и соответственно преобразовать их.

Я бы хотел получить "Пароль", хранящийся всимвол.

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Ключ - это массив байтов. Если вы хотите сохранить его, например, в string, вам следует создать строку, используя ее конструктор диапазона, то есть:

string key_string(Key, Key + sizeof(Key)/sizeof(Key[0]));

Или, если вы можете скомпилировать с помощью C ++ 11:

string key_string(begin(Key), end(Key));

Чтобы получить char*, я бы пошел по пути C и использовал strndup:

char* key_string = strndup(Key, sizeof(Key)/sizeof(Key[0]));

Однако, если вы используете C ++, я настоятельно рекомендую использовать string вместо char* и преобразовывать в char const* только в случае крайней необходимости (например, при вызове C API). См. здесь для веских причин предпочесть std::string.

1 голос
/ 29 сентября 2011

Все, что вам не хватает, это нулевой терминатор, поэтому после этого:

char Key_str[(sizeof Key)+1];
memcpy(Key_str,key,sizeof Key);
Key_str[sizeof Key] = '\0';

Key_str будет использоваться как обычная строка в стиле char *.

...