将ASCII字符串转换为十进制和十六进制表示形式
我需要将像“... 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;
}
您可以用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字符数组。
的字符串只是char
秒的阵列,因此,所有你需要做的是循环从0
到strlen(str)-1
,并使用printf()
或类似于将每个字符格式化为十进制/十六进制的东西。
这就是C,哥们。 – Puppy 2010-08-03 19:47:51
所以它值得downvote ?? – 2010-08-03 19:49:13
@DeadMG:C仍然有效C++ – 2010-08-03 19:49:35
刚打印出来的十六进制,像:
for (int i=0; i<your_string.size(); i++)
std::cout << std::hex << (unsigned int)your_string[i] << " ";
机会是你要设置的精确度和宽度总是给2位等,但总的想法是一样的。就个人而言,如果我这样做,我可能会使用printf("%.2x");
,因为它确实正确,而且麻烦少得多。
缺少ASCII值示例 – 2010-08-03 19:58:00
@ 0A0D:缺少合理的downvote借口。这个问题已经给出了输入和输出的例子。我只是告诉他如何得到它。 – 2010-08-03 20:08:55
“hello2”变成了十进制和/或十六进制表示形式“ - 对我来说似乎很清楚他想要十进制和十六进制 – 2010-08-03 20:14:50
for(int i = 0; i < string.size(); i++) {
std::cout << std::hex << (unsigned int)string[i];
}
在我的编译器上不起作用(我认为这是需要的,但我想知道为什么) – KeatsPeeks 2010-08-03 19:52:43
什么是错误?编译器 - 尽管需要强制转换为十六进制。 – Puppy 2010-08-03 19:58:10
因为'operator 2010-08-03 19:58:14
#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;
}
你可以通过做'char a ='B'来隐式地将任何char转换为ascii值。 int as = a;' 2010-08-03 20:00:35
我喜欢这个技巧。我现在唯一的问题是,如何以这种方式转换字符串?我想这个问题真的是,我如何将一个字符串的单个元素等同于“a”? – 2010-08-03 20:56:04
你可以在for循环中逐个字符地完成它。 – 2010-08-04 00:15:54