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; }
|