sprintfsnprintfsscanfitoaatoicinstring与进制转换

Posted 松狮MVP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sprintfsnprintfsscanfitoaatoicinstring与进制转换相关的知识,希望对你有一定的参考价值。

一、sprintf函数(是C标准库函数)

       功能:把格式化的数据写入某个字符串缓冲区。

       头文件: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



以上是关于sprintfsnprintfsscanfitoaatoicinstring与进制转换的主要内容,如果未能解决你的问题,请参考以下文章