将ASCII字符串转换为十进制和十六进制表示

时间:2010-08-03 19:43:04

标签: c++ decimal

我需要将像“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;
}

5 个答案:

答案 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];
}