c语言实现大小端判断和二进制模式写入各种数据到文件
2016-12-15 12:11
706 查看
#include <stdio.h> #include <stdlib.h> #include <inttypes.h> //测试大小端模式 void test_endian() { uint32_t i=0x04030201; unsigned char* cp=(unsigned char*)&i; if(*cp==1) printf("little-endian\n"); else if(*cp==4) printf("big-endian\n"); else printf("who knows?\n"); //exit(0); } void write_int() { int a=0x01001c00;//写入文件中变为00 1c 00 01,小端模式,从右往左 FILE* fp=fopen("int.bin","wb"); fwrite(&a,sizeof(a),1,fp); fclose(fp); printf("write_int ok!\n"); } void write_int2() { int a=1024;//小端模式,转换为16进制写入 FILE* fp=fopen("int1024.bin","wb"); fwrite(&a,sizeof(a),1,fp); fclose(fp); printf("write_int2 ok!\n"); } void write_float() { float a=1024.02;//小端模式,从右往左 FILE* fp=fopen("float.bin","wb"); fwrite(&a,sizeof(a),1,fp); fclose(fp); printf("write_float ok!\n"); } void write_char() { char a='m';//小端模式,从右往左 FILE* fp=fopen("char.bin","wb"); fwrite(&a,sizeof(a),1,fp); fclose(fp); printf("write_char ok!\n"); } void write_string2() { char *p; FILE *fp; char str[32]="example"; for(p=str;*p!=0;p++) *p+=129;//将可见字符转换成不可见字符,不一定是加129 fp=fopen("string2.txt","w+") ; fwrite(str,strlen(str),1,fp); fclose(fp); fp=fopen("string2.txt","r+") ; fread(str,1,strlen(str),fp); printf("%s\n",str);//在txt中显示的是乱码 for(p=str;*p!=0;p++) *p-=129;//转换成可见字符 printf("%s\n",str); fclose(fp); } //fwrite(&a,strlen(a),1,fp);//以二进制形式对文件进行操作 不用使用fwrite了 //以文本形式写入 void write_string() { char* a="yunshouhu";//小端模式,从右往左 FILE* fp=fopen("string.txt","w"); fprintf(fp,"%s",a); fclose(fp); printf("write_string ok!\n"); } //以文本形式读取 void read_string() { char line[1024]={0}; FILE* fp=fopen("string.txt","r"); int len=fscanf(fp,"%s",&line); fclose(fp); printf("read_string=%s len=%d\n",line,len); } //默认8的倍数对齐 4+1+10=15=>16 typedef struct Person { int age; char sex; char city[10]; } Person; //默认8的倍数对齐 16+4+10=30=>32 typedef struct Student { Person parent;//16 int weight; char classroom[10]; } Student; //默认8的倍数对齐 4+4+10=18=>24 typedef struct Student2 { Person* parent;//存在指针到文件中的话,指针对应的数据会丢失,因为你只存储了他的地址,没有保存他的数据 int weight; char classroom[10]; } Student2; void write_struct() { Person person; person.age=26; person.sex='m'; strcpy(person.city,"shenzhen"); FILE* fp=fopen("person.struct.bin","wb"); fwrite(&person,sizeof(person),1,fp); fclose(fp); printf("write_struct sizeof=%d ok!\n",sizeof(person));//16 } void write_Student_struct() { Person person; person.age=26; person.sex='m'; strcpy(person.city,"shenzhen"); Student stu; stu.parent=person;//16 stu.weight=140; memset(stu.classroom,0,sizeof(stu.classroom));//清零,否则是随机值 strcpy(stu.classroom,"204"); FILE* fp=fopen("student.struct.bin","wb"); fwrite(&stu,sizeof(stu),1,fp); fclose(fp); printf("write_Student_struct sizeof=%d ok!\n",sizeof(stu));//32 } void write_Student2_struct() { Person person; person.age=26; person.sex='m'; strcpy(person.city,"shenzhen"); Student2 stu; stu.parent=&person;//16 stu.weight=140; memset(stu.classroom,0,sizeof(stu.classroom));//清零,否则是随机值 strcpy(stu.classroom,"204"); FILE* fp=fopen("student2.struct.bin","wb"); fwrite(&stu,sizeof(stu),1,fp); fclose(fp); printf("write_Student2_struct sizeof=%d ok!\n",sizeof(stu));//24 } //c语言实现大小端判断和二进制模式写入各种数据到文件。 int main(void) { test_endian(); write_int(); write_int2(); write_float(); write_char(); write_string(); read_string(); write_struct(); write_Student_struct(); write_Student2_struct(); printf("write ok!\n"); return 0; }
相关文章推荐
- C语言判断数据存储时大端模式还是小端模式
- C语言中把结构内容写入二进制文件及从二进制文件中读取出数据
- c语言将数据写入文件(用链表实现)
- C语言判断数据存储时大端模式还是小端模式
- 比较各种装箱试探方法实现文件C语言
- 测试编辑器属哪种模式,使用C语言判断处理器的大小端
- C语言实现二进制文件读写
- 用C语言实现大小端判断
- (C语言)实现对任意浮点型数据从十进制到二进制的转换
- C语言实现二进制文件读写
- C语言实现二进制文件读写
- C++ 将数据写入二进制文件后,第二次打开文件修改部分数据,怎么前一次写入的数据被删除了。
- C语言实现二进制文件读写
- C语言实现myql中存取二进制文件
- C语言实现二进制文件读写
- 大端模式和小端模式的区别与判断手段及代码实现
- C语言实现二进制文件读写
- Java实现 二进制读取和写入 拷贝文件
- 十六进制数据写入到二进制数据文件
- C语言实现二进制文件读写