sprintf、snprintf、sscanf、itoa、atoi、cin、string与进制转换
2016-08-15 17:05
483 查看
一、sprintf函数(是C标准库函数)
功能:把格式化的数据写入某个字符串缓冲区。
头文件:stdio.h
原型:int sprintf ( char *buffer, const char *format, [argument] …);
参数列表:
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
附:int _snprintf(char *buffer, size_t count, const char *format [,argument] ... );
二、sscanf函数
功能: 从一个字符串中读进与指定格式相符的数据。
头文件:stdio.h
原型:int sscanf(const char *, const char *, ...);
int sscanf(const char *buffer, const char *format, [argument]...);
参数列表:
buffer:存储的数据
format:格式控制字符串
argument: 选择性设定字符串
sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。
三、itoa函数(并不是C标准库中的函数,是Windows下扩展的)
功能:将任意类型的数字转换为字符串。
头文件 : <stdlib.h>。
原型:char*itoa(int value, char*string, int radix);
参数列表:
int value 被转换的整数,
char *string 转换后储存的字符数组,
int radix 转换进制数,如2, 8, 10, 16 进制等
四、aoti函数
功能:把字符串转换成整型数。
头文件 : <stdlib.h>。
原型:int atoi(const char *nptr);
函数说明:
atoi() 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
五、cin与进制转换
头文件:#include<iomanip>;
功能:以格式状态控制输入、输出;
使用操纵符hex、oct和dec将其改为十六进制、八进制、改回十进制。这些操纵符只影响整型,不影响浮点值形式。
使用上面的操纵符后,输出中并不会显示指出该数是多少进制。如果想要输出前导标志(0x十六进制、0八进制),需要使用showbase操纵符(使用noshowbase恢复流状态)。
六、string和数值之间的转换:
to_string(val):返回数值val的string表示。(val可以是任何类型,这是一组重载的函数)
stoi(s,p,b):返回s的起始子串的数值,返回值int型。p是size_t指针,用来保存s中第一个非数值字符的下标。b表示转换所用的基数。
string s1("123456");
int i1 = stoi(s1, 0, 10);
cout << i1 << endl; //123456
string s2("f");
int i2 = stoi(s2, 0, 16);
cout << i2 << endl; //15
功能:把格式化的数据写入某个字符串缓冲区。
头文件:stdio.h
原型:int sprintf ( char *buffer, const char *format, [argument] …);
参数列表:
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
转换字符
%% 印出百分比符号,不转换。%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
char str[255]; sprintf(str, "%x", 100); //将100转为16进制表示的字符串,并且存入str字符数组中。
附:int _snprintf(char *buffer, size_t count, const char *format [,argument] ... );
二、sscanf函数
功能: 从一个字符串中读进与指定格式相符的数据。
头文件:stdio.h
原型:int sscanf(const char *, const char *, ...);
int sscanf(const char *buffer, const char *format, [argument]...);
参数列表:
buffer:存储的数据
format:格式控制字符串
argument: 选择性设定字符串
sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。
#include <stdio.h> int main() { char s[100] = {0}; sprintf(s, "%x", 15); printf("%s\n", s); // f char str[100] = "f"; int i = 0; sscanf(str, "%x", &i); printf("%d\n", i); // 15 return 0; }
三、itoa函数(并不是C标准库中的函数,是Windows下扩展的)
功能:将任意类型的数字转换为字符串。
头文件 : <stdlib.h>。
原型:char*itoa(int value, char*string, int radix);
参数列表:
int value 被转换的整数,
char *string 转换后储存的字符数组,
int radix 转换进制数,如2, 8, 10, 16 进制等
int main() { int number = 12345; char string[25]; _itoa(number, string, 10);//按十进制转换 printf("integer = %d , string = %s\n", number, string); _itoa(number, string, 16);//按16进制转换 printf("integer = %d , string = %s\n", number, string); //integer = 12345 , string = 12345 ——说明12345的十进制表示就是12345 //integer = 12345 , string = 3039 ——说明12345的十六进制表示是0x3039 return 0; }
int i; char s[128]; scanf("%d",&i); itoa(i, s, 2); /*3个参数,第一个是待转换的数,第二个是存放转换后的字符串的指针,第三个是需要转换的进制*/ printf("该数转换为二进制是: [%s]\n",s);
四、aoti函数
功能:把字符串转换成整型数。
头文件 : <stdlib.h>。
原型:int atoi(const char *nptr);
函数说明:
atoi() 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
int main() { int n; char *str = "12345.67"; n = atoi(str); printf("int = %d\n", n); return 0; }
五、cin与进制转换
头文件:#include<iomanip>;
功能:以格式状态控制输入、输出;
使用操纵符hex、oct和dec将其改为十六进制、八进制、改回十进制。这些操纵符只影响整型,不影响浮点值形式。
使用上面的操纵符后,输出中并不会显示指出该数是多少进制。如果想要输出前导标志(0x十六进制、0八进制),需要使用showbase操纵符(使用noshowbase恢复流状态)。
int main() { /*string str; while (cin >> str) { int n; sscanf(str.c_str(), "%x", &n); cout << n << endl; }*/ int a; while (cin >> hex >> a) //十六进制输入 { cout << a << endl; //十进制输出 } return 0; }
六、string和数值之间的转换:
to_string(val):返回数值val的string表示。(val可以是任何类型,这是一组重载的函数)
stoi(s,p,b):返回s的起始子串的数值,返回值int型。p是size_t指针,用来保存s中第一个非数值字符的下标。b表示转换所用的基数。
string s1("123456");
int i1 = stoi(s1, 0, 10);
cout << i1 << endl; //123456
string s2("f");
int i2 = stoi(s2, 0, 16);
cout << i2 << endl; //15
相关文章推荐
- sscanf,ssprintf,itoa,atoi用法
- stringstream/snprintf/sscanf/atoi/itoa数据类型转换比较
- sprintf,sscanf,snprintf
- C语言中的进制转换 itoa & sprintf
- itoa atoi sprintf strcat比较_走向希望_新浪博客
- C++11中的string - atoi/itoa
- ssprintf sscanf atoi itoa 整数字符串转换
- ssprintf sscanf atoi itoa 整数字符串转换
- atoi(), atol(), itoa(), sprintf() 及 strcat()函数
- 字符流(stringstream|sscanf|sprintf)
- CString类常用方法----Format(),sprintf(),itoa(),ltoa(),ultoa(),atoi(),atol(),atof()
- C语言数字与字符串转换 atoi()函数、itoa()函数、sprintf()函数
- atoi, itoa, sprintf and sscanf
- atoi和itoa之坑------还是用stringstream吧!
- atof(),atoi(),itoa(),sprintf()函数详解
- itoa , atoi ,sprintf 的用法
- atoi,itoa,sprintf等函数的实现
- C语言数字与字符串转换 atoi()函数、itoa()函数、sprintf()函数
- 关于sprintf(snprintf)和sscanf的用法
- sscanf,snprintf,sprintf小结