强制类型转换、使用函数转换与memcpy
如果一个int型的变量值为5,则若使用强制类型转换或者使用memcpy,则相当于直接copy内存中的值,若打印,则会打印5对应的ASCII值;而若使用函数转换,则函数会操作内存转为ASCII值的5,若打印,则直接为5。
memcpy在一定程度上相当于强制类型转换,但是可以制定拷贝的字节大小,因此可能不会出现丢失数据,如大于256的时候,int强制转char,复制低8位给char,其余舍弃
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
   | #include <stdio.h> #include <stdlib.h> #include <string.h>
 
  // 不足4个字节的前面补零 void int2char(int number, char* result, int length_send) {     char str[20];     sprintf(str,"%4d",number); // 格式化输出int到str字符串
      int i;     for(i=0;i<length_send;++i)         if(str[i]==' ')             str[i]=' ';     strcpy(result,str); // result 此时只有2个char的大小,但是仍然可以copy4个字节给他 }
 
  // memcpy在一定程度上相当于强制类型转换,但是可以制定拷贝的字节大小,因此可能不会出现丢失数据,如大于256的时候,int强制转char。 int main(int argc, char const *argv[]) {     int num = 97;     printf("num:%d\n", num);     printf("\n");
 
      /**********************************     强制类型转换与读取     **********************************/     char c = (char)num;     printf("c:%c\n", c);     printf("read_c:%d\n", (int)c);     printf("\n");
 
      /**********************************     函数类型转换与读取     **********************************/     //char *d; //报错,需要声明大小     char *d = (char*)malloc(sizeof(char)*2);     //char d[24]; // 也行
      int2char(num, d, 4);  // 使用函数转换,不足4位的前面补零,事实证明此函数废的     printf("d_string:%s\t%d\n", d, (int)strlen(d));     int read_d = atoi(d); // 这个d前面补零与补零都可以     printf("read_d:%d\n", read_d);     printf("\n");
      char *dd = (char*)malloc(sizeof(char)*2);     sprintf(dd, "%4d", num); //也行     printf("compare dd and d:if equal,then 0:%d\n", strcmp(dd,d));     int read_dd = atoi(dd); // 这个d前面补零与补零都可以解析     printf("read_dd:d%d\n", read_dd);     printf("\n");
 
      /**********************************     memcpy类型转换与读取     **********************************/     char *e = (char*)malloc(sizeof(char)*4);     //char e[4];     memcpy(e,&num,sizeof(num)); //相当于强制类型转换     printf("e:%s\n", e);     int f;     memcpy(&f,e,sizeof(e)); //强制类型转换过来     printf("read_e:%d\n", f);
      return 0; }
   | 
运行结果为

字节数组byte[]与int类型转换
1 2 3 4 5 6
   | //int --> BYTE[]: int data = 0xFFFFFFFF; unsigned char buf[4]; memcpy(buf, &data, sizeof(int)); //BYTE[] --> int : memcpy(&data, buf, 4);
   | 
Char数组转为int类型
对于socket编程,服务端发送的时候,发送的长和宽均为4个字节的char型数组,而总长度为8个字节的char数组,接收和转int类型的代码如下,因为char数组,以\0结尾,所以这里声明大小的时候,需要大于1位。
而将char数组转换int类型,则使用atoi,注意c_str()作用是将string转为char,因此不用加。
例如
1 2 3 4 5 6 7 8 9 10 11 12
   | char len[9] = {0}; char wid[5] = {0}; char hei[5] = {0};
  recv(fd, len, 8, 0); recv(fd, wid, 4, 0); recv(fd, hei, 4, 0); printf("length:%s\nclos:%s\nrows:%s\n", len, wid, hei);
  length = atoi(len); width = atoi(wid);  height = atoi(hei);
  | 
string 与 int 互转
string转int的方式
1) 采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了。
2) 采用标准库中atoi函数。对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等。
1 2
   | string s = "12";  int a = atoi(s.c_str());
   | 
3) 采用sstream头文件中定义的字符串流对象来实现转换。
1 2 3
   | istringstream is("12"); //构造输入字符串流,流的内容初始化为“12”的字符串  int i;  is >> i; //从is流中读入一个int整数存入i中`
  | 
int转string的方式
1) 采用标准库中的to_string函数。
1 2
   | int i = 12;  cout << std::to_string(i) << endl;`
   | 
不需要包含任何头文件,应该是在utility中,但无需包含,直接使用,还定义任何其他内置类型转为string的重载函数,很方便。
2) 采用sstream中定义的字符串流对象来实现。
1 2 3 4
   | ostringstream os; //构造一个输出字符串流,流内容为空  int i = 12;  os << i; //向输出字符串流中输出int整数i的内容  cout << os.str() << endl; //利用字符串流的str函数获取流中的内容
   | 
字符串流对象的str函数对于istringstream和ostringstream都适用,都可以获取流中的内容。
string转char
1 2
   | string s = "12"; s.c_str()
   | 
const char* 和char* 之间的转换
const char*是指向常量的指针,而不是指针本身为常量,可以不被初始化.该指针可以指向常量也可以指向变量,只是从该指针的角度而言,它所指向的是常量,通过该指针不能修改它所指向的数据.
const char*转为char*
const char*是不能直接赋值到char*的,这样编译都不能通过,理由:假如可以的话,那么通过char*就可以修改const char指向的内容了,这是不允许的.所以char*要另外开辟新的空间。
1 2 3 4 5 6 7 8
   | #include <iostream> using namespace std; void main(){  const char* cpc="abcde";  char* pc=new char[100];  strcpy(pc,cpc);  cout<<pc<<endl; }
   | 
char*转为const char*
直接赋值就可以了
1 2 3
   | const char* cpc; char* pc="abcde"; cpc=pc;
   | 
参考
const char 和char 之间的转换