字符串str_hex
包含字母A-J的十六进制值,它对应于十进制值65-74。我正在尝试将每个十六进制值转换为其十进制值following this example。对于for循环内的std::cout
情况,它很好用,但是输出std::string
仍然具有ascii值。为什么这不起作用,或者有没有更好/更合适的方法来构建输出字符串?
#include <string>
#include <iostream>
#include <stdint.h>
int main()
{
std::string str_hex("\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b", 10);
std::string str_output = "";
for (int i = 0; i < 10; ++i)
{
uint8_t tmp = str_hex[i];
str_output.append(1, (unsigned)tmp);
std::cout << "cout+for: " << (unsigned)tmp << std::endl;
if(i<9)
str_output.append(1, '-');
}
std::cout << std::endl << "cout+str_append: " << str_output << std::endl;
return 0;
}
编译并运行程序会得到以下输出:
cout+for: 65
cout+for: 66
cout+for: 67
...
cout+str_append: A-B-C-D-E-F-G-H-I-J
所需的输出是:
cout+str_append: 65-66-67-68-...
答案 0 :(得分:1)
方法string::append
在各种重载中接受size_t
和char
,请参见reference。
string&append(size_t n,char c);
因此,在您的代码行中
str_output.append(1, (unsigned)tmp);
您正在将未签名的tmp
隐式转换为字符,即单个字母。要获得所需的输出,必须将tmp
转换为包含数字的字符串,然后将其附加到str_output
。您可以使用
str_output+=std::to_string(tmp);
代替str_output.append(1, (unsigned)tmp);
。
答案 1 :(得分:0)
您必须将字符串append
更改为从数字到其“字符串”的更改:
str_output.append(std::to_string(tmp));
这不是您要添加的字符,而是代表数字的字符串。