如何在C ++中将0x70,0x61,0x73 ......等转换为Pas ...等?

时间:2011-09-29 02:21:31

标签: c++ hex ascii decimal

我正在使用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 个答案:

答案 0 :(得分:2)

Key是一个字节数组。例如,如果要将其存储在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的理由,请参阅here

答案 1 :(得分:1)

你所缺乏的只是一个空终止符,所以在这之后:

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

Key_str可用作常规char *样式字符串。