我需要将像“hello2”这样的ASCII字符串转换为十进制和十六进制表示形式(数字形式,具体类型无关紧要)。所以,“你好”将是:68 65 6c 6c 6f 32 in HEX。如果不使用巨大的if语句,我如何在C ++中执行此操作?
编辑:好的,这就是我选择的解决方案:int main()
{
string c = "B";
char *cs = new char[c.size() + 1];
std::strcpy ( cs, c.c_str() );
cout << cs << endl;
char a = *cs;
int as = a;
cout << as << endl;
return 0;
}
答案 0 :(得分:6)
只需将其打印成十六进制,例如:
for (int i=0; i<your_string.size(); i++)
std::cout << std::hex << (unsigned int)your_string[i] << " ";
您可能希望将精度和宽度设置为总是给出2位数等等,但总体思路保持不变。就个人而言,如果我这样做,我可能会使用printf("%.2x");
,因为它做得恰到好处,而且麻烦要少得多。
答案 1 :(得分:3)
字符串只是char
的数组,因此您需要做的就是从0
循环到strlen(str)-1
,然后使用printf()
或类似的格式每个字符为十进制/十六进制。
答案 2 :(得分:1)
您可以使用printf()将结果写入stdout,也可以使用sprintf / snprintf将结果写入字符串。这里的关键是格式字符串中的%X。
#include <cstdio>
#include <cstring>
int main(int argc, char **argv)
{
char *string = "hello2";
int i;
for (i = 0; i < strlen(string); i++)
printf("%X", string[i]);
return 0;
}
如果处理C ++ std :: string,可以使用字符串的c_str()方法生成C字符数组。
答案 3 :(得分:1)
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
int main() {
std::string hello = "Hello, world!";
std::cout << std::hex << std::setw(2) << std::setfill('0');
std::copy(hello.begin(),
hello.end (),
std::ostream_iterator<unsigned>(std::cout, " "));
std::cout << std::endl;
}
答案 4 :(得分:0)
for(int i = 0; i < string.size(); i++) {
std::cout << std::hex << (unsigned int)string[i];
}