C++中的字符串到十六进制值转换
有没有一种方法,将一对整数通过串联放入一个字符串中,当该字符串被逐字符读取并打印为十六进制时,这些数字的十六进制值就等于数字本身 例如: 假设我有两个数字,6和8以及一个字符串 在第一步中,我连接它们并得到一个字符串 6yahoo8使用snprintf 在下一步中,我逐字读取该字符串并打印 拿出他们的十六进制值 我希望获得最终输出,如下所示: {0x06,0x79,0x61,0x68,0x6F, 0x6F,0x08} 但我的程序正在打印结果: {0x36、0x79、0x61、0x68、0x6F, 0x6F,0x38} 除第一个和最后一个字节外,此结果是正确的。 有没有办法像我想的那样完成任务? 非常感谢您的建议 我用于形成字符串的程序:C++中的字符串到十六进制值转换,c++,c,C++,C,有没有一种方法,将一对整数通过串联放入一个字符串中,当该字符串被逐字符读取并打印为十六进制时,这些数字的十六进制值就等于数字本身 例如: 假设我有两个数字,6和8以及一个字符串 在第一步中,我连接它们并得到一个字符串 6yahoo8使用snprintf 在下一步中,我逐字读取该字符串并打印 拿出他们的十六进制值 我希望获得最终输出,如下所示: {0x06,0x79,0x61,0x68,0x6F, 0x6F,0x08} 但我的程序正在打印结果: {0x36、0x79、0x61、0x68、0x6F,
string encode_url() {
StringAccum sa;
string url;
const char *str = "yahoo";
int p = 6;
int q = 8;
sa.snprintf(1,"%x", p); // snprintf(len, format, value);
sa << str.c_str();
sa.snprintf(1, "%x", q);
url = string(sa.take_string().c_str());
return url;
}
<> P>有一些常用函数,如String Casum,它基本上是C++中的字符串累加器。
要找到原因,您必须查看ASCII字符代码 如果将8转换为十六进制,将得到0x38。与6类似,您将得到0x36
为什么得到0x38而不是0x8,因为这里8是一个字符串而不是一个字符变量,比int更不明显,int是另一种纯整数类型,char。它基本上只是另一种int,但有不同的应用程序 请停止使用术语C/C++。@NickyC我已经用了一个更好的版本:p当你把数字放入字符串时,它变成了一个字符,“6”的ASCII码是36。你需要这个的原因让我非常恼火。它有一种刺鼻的气味。无论如何,如果你想在你的字符缓冲区的开头或结尾存储一个范围非常有限的数字,不要转换它;只需将其直接存储在适当的字符槽中,即不要使用snprintf。@SouravGhosh好的,您赢了。