C++ 将c+中的整数转换为字符串+;

C++ 将c+中的整数转换为字符串+;,c++,string,C++,String,这是我编写的将整数转换为字符串的代码 #include <iostream> using namespace std; int main() { string s; int b=5; s.push_back((char)b); cout<<s<<endl; } #包括 使用名称空间std; int main() { 字符串s; int b=5; s、 推回((字符)b); cout数字的字符代码不等于典型系统中字符所代表的整数

这是我编写的将整数转换为字符串的代码

#include <iostream>
using namespace std;
int main()
{
    string s;
    int b=5;
    s.push_back((char)b);
    cout<<s<<endl;
}
#包括
使用名称空间std;
int main()
{
字符串s;
int b=5;
s、 推回((字符)b);

cout数字的字符代码不等于典型系统中字符所代表的整数

授权十进制数字的字符代码是连续的(2.3个字符集,第3段),因此您可以添加
'0'
以将一个数字转换为字符

#include <iostream>
using namespace std;
int main()
{
    string s;
    int b=5;
    s.push_back((char)(b + '0'));
    cout<<s<<endl;
}
#包括
使用名称空间std;
int main()
{
字符串s;
int b=5;
s、 推回((字符)(b+0');

cout您正在将整数5解释为字符。在ASCII编码中,5是查找时的查询控制字符


另一方面,字符5由十进制数字53表示。

正如其他人所说,您不能以这样的方式将整数转换为字符串

IMHO,最好的方法是使用C++11方法

你的例子可以转化为:

using namespace std;
int main()
{
    string s;
    int b=5;
    s = to_string(b);
    cout<<s<<endl;
}
使用名称空间std;
int main()
{
字符串s;
int b=5;
s=至_字符串(b);
cout此外,您可以使用,

STD::在我国GCC

> P >字符串不适用,如果我们在2016从头开始写C++,也许我们会做这件事,但是它选择的是(大部分)与C等相当低级的语言向后兼容,
'char'
实际上只是一个数字,字符串/打印算法将其解释为一个字符,但大多数语言都不处理特殊字符。包括cast。因此,通过执行
(char)
,您只转换了一个32位带符号的数字(
int
)到8位有符号数字(
char

然后在打印时将其解释为一个字符,因为打印函数确实对其进行特殊处理。但它打印出来的值不是
'5'
。对应关系是常规的,完全任意的;第一个数字保留给特殊代码,这些代码可能已经过时。正如霍夫曼指出的,位值
5
是查询的代码
(无论它是什么意思),而要打印
'5'
字符必须包含
53
的值。要打印一个合适的空格,你需要输入
32
。它没有任何意义,除非有人在几十年前的某个时候认为这和任何东西一样好,而且这个惯例仍然存在

如果你需要知道其他字符和值,你需要的是一个“ASCII表”。只要用谷歌搜索一下,你会发现很多

你会注意到,同一大小写的数字和字母按照你期望的顺序排列在一起,因此至少有一些逻辑。但是,要注意,这通常不是直观的:例如,大写字母在小写字母之前,所以
'A'<'A'


我想您已经开始明白为什么字符串使用专用系统函数更好了!

代码中的问题是您正在将整数5转换为ASCII(=>ENQ ASCII代码,它是不“可打印的”)。 要将其正确转换为ASCII,必须添加ASCII代码“0”(48),以便:

但是,要将整数转换为std::string,请使用:

std::stringstream ss; //from <sstream>
ss << 5;
std::string s = ss.str ();
std::stringstream ss;//来自

ss它可能不是一个空格。查看一个ASCII表:我非常怀疑“ENQ”是否是多余的。这些控制字符用于控制设备之间的信息流和消息确认,尽管当前的协议(http、ftp等)是什么使用我不知道。据我记忆所及,40多年前,ENQ被用于投标一个通信信道,STX表示消息的开始,ETX表示消息的结束,ACK表示消息已正确接收,NAK表示未正确接收,SYN表示同步等。因此,ASCII“0”是十六进制30,空格是十六进制20,字母是让我们开始像这样的转换,我有一个书签
std::stringstream ss; //from <sstream>
ss << 5;
std::string s = ss.str ();
template <typename T>
std::string toString (T arg)
{
    std::stringstream ss;
    ss << arg;
    return ss.str ();
}