2010-08-03 154 views
0

我需要将像“... hello2”这样的ASCII字符串转换为十进制和/或十六进制表示形式(数字形式,具体种类无关紧要)。所以,“你好”将是:68 65 6c 6c 6f 32在HEX。如何在不使用巨大if语句的情况下在C++中执行此操作?将ASCII字符串转换为十进制和十六进制表示形式

编辑:好了,所以这是我去的解决方案:

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

你可以通过做'char a ='B'来隐式地将任何char转换为ascii值。 int as = a;'< - 产生66(ascii值) – 2010-08-03 20:00:35

+0

我喜欢这个技巧。我现在唯一的问题是,如何以这种方式转换字符串?我想这个问题真的是,我如何将一个字符串的单个元素等同于“a”? – 2010-08-03 20:56:04

+0

你可以在for循环中逐个字符地完成它。 – 2010-08-04 00:15:54

回答

1

您可以用printf()写结果到标准输出或者你可以用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,你可以使用string的c_str()方法来产生一个C字符数组。

+0

为什么downvote?它工作正常,不是吗? – brennie 2010-08-03 20:03:25

+0

缺少字符串到ASCII值示例 – 2010-08-03 20:04:15

+0

字符串到ASCII值的示例?海报表明他以ASCII值开头。 “我需要将ASCII字符串转换为...”hello2“” – brennie 2010-08-03 20:12:34

3

的字符串只是char秒的阵列,因此,所有你需要做的是循环从0strlen(str)-1,并使用printf()或类似于将每个字符格式化为十进制/十六进制的东西。

+0

这就是C,哥们。 – Puppy 2010-08-03 19:47:51

+2

所以它值得downvote ?? – 2010-08-03 19:49:13

+3

@DeadMG:C仍然有效C++ – 2010-08-03 19:49:35

6

刚打印出来的十六进制,像:

for (int i=0; i<your_string.size(); i++) 
    std::cout << std::hex << (unsigned int)your_string[i] << " "; 

机会是你要设置的精确度和宽度总是给2位等,但总的想法是一样的。就个人而言,如果我这样做,我可能会使用printf("%.2x");,因为它确实正确,而且麻烦少得多。

+0

缺少ASCII值示例 – 2010-08-03 19:58:00

+0

@ 0A0D:缺少合理的downvote借口。这个问题已经给出了输入和输出的例子。我只是告诉他如何得到它。 – 2010-08-03 20:08:55

+0

“hello2”变成了十进制和/或十六进制表示形式“ - 对我来说似乎很清楚他想要十进制和十六进制 – 2010-08-03 20:14:50

0
for(int i = 0; i < string.size(); i++) { 
    std::cout << std::hex << (unsigned int)string[i]; 
} 
+0

在我的编译器上不起作用(我认为这是需要的,但我想知道为什么) – KeatsPeeks 2010-08-03 19:52:43

+0

什么是错误?编译器 - 尽管需要强制转换为十六进制。 – Puppy 2010-08-03 19:58:10

+0

因为'operator <<'被重载,并且你需要一个带'int'(或'short','long'等等的重载)为'hex'标志有效(即'char'的重载忽略'hex'标志)。 – 2010-08-03 19:58:14

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; 
} 
相关问题