有时候在服务器端开发的时候,需要对自定制上层协议来序列化和反序列化数据,这种情况下有时候就会用到标题所言的这种操作。下面我列举几种常见的方法。
1. sprintf函数和sscanf函数
1.1 sscanf函数(string -> int)
char buf[SIZE] = "a=10&b=20";
int a = 0;
int b = 0;
sscanf(buf, "a=%d&b=%d", &a, &b);
1.2 sprintf函数(int -> string)
int result = a + b;
char buf[SIZE] = {0};
sprintf(buf, "result=%d", result);
2. atoi函数、itoa函数
这两个函数并没有实现标准化,所以不推荐使用!
2.1 atoi函数(string -> int)
int i;
char szInput [256];
printf ("Enter a number: ");
fgets ( szInput, 256, stdin );
i = atoi (szInput);
printf ("The value entered is %d. The double is %d.\n",i,i*2);
return 0;
2.2 itoa函数(int -> string)
int i;
char buffer [33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,buffer,10);
printf ("decimal: %s\n",buffer);
itoa (i,buffer,16);
printf ("hexadecimal: %s\n",buffer);
itoa (i,buffer,2);
printf ("binary: %s\n",buffer);
return 0;
3. stringstream类
@@要使用这个类,首先得包含这个头文件 < sstream>
@@多次使用同一个stringsream转换不同对象时,转换前需要使用clear()
@@这个方法的缺点是操作大量数据的时候速度就会下降。
3.1 string -> int
char * str = "100";
stringstream s(str);
int pos;
s >> pos; //从 s 中提取数据 100 赋给 pos
3.2 int -> string
stringstream s;
int pos = 100;
s << pos; //取得 pos 中的值
string str = s.str();