C++ int与string的转化

简介: int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)---前缀加0,16进制(hex)---前缀加0x或者0X。

int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)---前缀加0,16进制(hex)---前缀加0x或者0X。

string前后加上双引号,告诉编译器把它当成一串字符来解释。

注意:对于字符,需要区分字符和字符表示的数值。比如:char a = 8;char b = '8',a表示第8个字符,b表示字符8,是第56个字符。


 int转化为string

1、使用itoa(int to string)

复制代码
 1  //char *itoa( int value, char *string,int radix);
 2  // 原型说明:
 3  // value:欲转换的数据。
 4  // string:目标字符串的地址。
 5  // radix:转换后的进制数,可以是10进制、16进制等。
 6  // 返回指向string这个字符串的指针
 7 
 8  int aa = 30;
 9  char c[8];
10  itoa(aa,c,16);
11  cout<<c<<endl; // 1e
复制代码

注意:itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。

2、使用sprintf

复制代码
 1  // int sprintf( char *buffer, const char *format, [ argument] … );
 2  //参数列表
 3  // buffer:char型指针,指向将要写入的字符串的缓冲区。
 4  // format:格式化字符串。
 5  // [argument]...:可选参数,可以是任何类型的数据。
 6  // 返回值:字符串长度(strlen)
 7 
 8  int aa = 30;
 9  char c[8]; 
10  int length = sprintf(c, "%05X", aa); 
11  cout<<c<<endl; // 0001E
复制代码

3、使用stringstream

复制代码
1  int aa = 30;
2  stringstream ss;
3  ss<<aa; 
4  string s1 = ss.str();
5  cout<<s1<<endl; // 30
6 
7  string s2;
8  ss>>s2;
9  cout<<s2<<endl; // 30
复制代码

可以这样理解,stringstream可以吞下不同的类型,根据s2的类型,然后吐出不同的类型。
4、使用boost库中的lexical_cast

1  int aa = 30;
2  string s = boost::lexical_cast<string>(aa);
3  cout<<s<<endl; // 30

3和4只能转化为10进制的字符串,不能转化为其它进制的字符串。


 string转化为int
1、使用strtol(string to long) 

复制代码
1 string s = "17";
2  char* end;
3  int i = static_cast<int>(strtol(s.c_str(),&end,16));
4  cout<<i<<endl; // 23
5 
6  i = static_cast<int>(strtol(s.c_str(),&end,10));
7  cout<<i<<endl; // 17
复制代码

2、使用sscanf

复制代码
1 int i;
2  sscanf("17","%D",&i);
3  cout<<i<<endl; // 17
4 
5  sscanf("17","%X",&i);
6  cout<<i<<endl; // 23
7 
8  sscanf("0X17","%X",&i);
9  cout<<i<<endl; // 23
复制代码

3、使用stringstream

复制代码
1  string s = "17";
2 
3  stringstream ss;
4  ss<<s;
5 
6  int i;
7  ss>>i;
8  cout<<i<<endl; // 17
复制代码

注:stringstream可以吞下任何类型,根据实际需要吐出不同的类型。
4、使用boost库中的lexical_cast

1  string s = "17";
2  int i = boost::lexical_cast<int>(s);
3  cout<<i<<endl; // 17
目录
相关文章
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
模拟实现c++中的string
模拟实现c++中的string
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
222 5
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
147 2
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
132 0
|
5月前
|
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
54 1

热门文章

最新文章