前言:作为一个安卓程序员,如果不懂C/C++开发,那么安卓jni、NDK、视频解码、音频解码也没法开发,有需求我们就要学习,加油吧!今天开始我们快速讲解C语言,有Java基础的人适合看本博客。
--------分割线------
本篇博客代码需要用到的头文件:
#define _CRT_SECURE_NO_WARNINGS #include "stdlib.h" #include "stdio.h" #include "string.h"---------分割线-----
联合体:联合体又称共同体,不同类型的变量共通占用一段内存(相互覆盖),联合变量任何时刻只有一个成员存在,优点是节省内存,联合体变量的大小=最大的成员所占的字节数。
例子:
union MyValue{ int x; int y; double z; }; void main(){ union MyValue d1; d1.x = 90; d1.y = 100;//最后一次赋值有效 //d1.z = 23.8; printf("%d,%d,%d",d1.x,d1.y,d1.z); getchar(); }运行截图:
和typefef组合:
typedef union jvalue { jboolean z; jbyte b; jchar c; jshort s; jint i; jlong j; jfloat f; jdouble d; jobject l; } jvalue;------------分割线--------
枚举:限定值,保证取值的安全性。
举例:
enum Day{ Monday, Tuesday, Wendesday, Thuresday, Saturday, Sunday }; void main(){ //枚举的时候,必须是括号中的值 enum Day d = Monday; printf("%#x,%d\n",&d,d); getchar(); }运行截图:
---------分割线-------
IO操作:
读取文本:
void main(){ //char* path = "E:\\fly\\code2\\files\\friends.txt"; char* path = "E:\\fly\\code2\\files\\friends_new.txt"; //打开 FILE *fp = fopen(path,"r"); if (fp == NULL){ printf("文件打开失败!!!"); return; } //读取 char buff[50];//缓冲 while (fgets(buff, 50, fp)){ printf("%s",buff); } //关闭 fclose(fp); getchar(); }运行截图:
写入文本:
void main(){ char* path = "E:\\fly\\code2\\files\\friends_new2.txt"; //打开 FILE *fp = fopen(path,"w"); char *text = "我们是好学生,我们是三好学生\n啦啦啦。"; //往里面写 fputs(text,fp); //关闭流 fclose(fp); getchar(); }打开文件夹显示:
1.计算机的文件存储在物理上都是二进制
2.文本文件和二进制之分,其实是一个逻辑之分
3.C读写文本文件和二进制文件的差别仅仅体现在回车换行符
4.写文本时,每遇到一个'\n',将会转换成'\r\n'(回车换行),读文本时,每遇到一个'\r\n',会将其转换成'\n'
例子:
void main(){ char *read_path = "E:\\fly\\code2\\files\\timg.jpg"; char *write_path = "E:\\fly\\code2\\files\\timg_new.jpg"; //读的文件 b字符表示操作二进制文件binary FILE *read_fp = fopen(read_path,"rb"); //写的文件 FILE *write_fp = fopen(write_path,"wb"); //复制 int buff[50];//缓冲区域 int len = 0;//每次读到的数据长度 while ((len = fread(buff, sizeof(int), 50, read_fp)) != 0){ //将读到的内容写入新的文件 fwrite(buff, sizeof(int), len, write_fp); } //关闭流 fclose(read_fp); fclose(write_fp); getchar(); }打开所在文件夹:
--------分割线-------
文本文件加密
规则:异或(1^1 = 0,0^0 = 0;1^0 = 1,0^1 = 1)
demo1:
//加密 void crptpy(char normal_path[], char crypt_path[]){ //打开文件 FILE *normal_fp = fopen(normal_path,"r"); FILE *crypt_fp = fopen(crypt_path, "w"); //一次读取一个字符 int ch; //EOF:End of file while ((ch = fgetc(normal_fp)) != EOF){ //写入(异或运算) fputc(ch ^ 9, crypt_fp); } //关闭 fclose(crypt_fp); fclose(normal_fp); } //解密 void decrpypt(char crypt_path[], char decrypt_path[]){ //打开文件 FILE *normal_fp = fopen(crypt_path,"r"); FILE *crypt_fp = fopen(decrypt_path,"w"); //一次读一个字符 int ch; while ((ch = fgetc(normal_fp)) != EOF){ //写入(异或预算) fputc(ch ^ 9, crypt_fp); } //关闭 fclose(crypt_fp); fclose(normal_fp); } void main(){ char *normal_path = "E:\\fly\\code2\\files\\friends.txt"; char *crypt_path = "E:\\fly\\code2\\files\\friends_crypt.txt"; char *decrypt_path = "E:\\fly\\code2\\files\\friends_decrypt.txt"; //加密 //crptpy(normal_path,crypt_path); //解密 decrpypt(crypt_path,decrypt_path); getchar(); }先加密在解密,运行截图:
demo2:二进制文件加密,读取二进制文件中的数据时一个一个字节读取
//加密 void crypt(char normal_path[], char crpypt_path[], char password[]){ //打开文件 FILE *normal_fp = fopen(normal_path,"rb"); FILE *crpypt_fp = fopen(crpypt_path,"wb"); //一次读取一个字符 int ch; int i = 0;//循环使用密码中的字母进行异或运算 int pwd_len = strlen(password);//密码的长度 while ((ch = fgetc(normal_fp)) != EOF){ //写入(异或运算) fputc(ch^password[i%pwd_len], crpypt_fp); i++; } //关闭 fclose(normal_fp); fclose(crpypt_fp); } //解密 void decrypt(char crpypt_path[], char decrpypt_path[], char password[]){ //打开文件 FILE *normal_fp = fopen(crpypt_path, "rb"); FILE *crpypt_fp = fopen(decrpypt_path, "wb"); //一次读取一个字符 int ch; int i = 0;//循环使用密码中的字母进行异或运算 int pwd_len = strlen(password);//密码的长度 while ((ch = fgetc(normal_fp)) != EOF){ //写入(异或运算) fputc(ch^password[i%pwd_len], crpypt_fp); i++; } //关闭 fclose(normal_fp); fclose(crpypt_fp); } void main(){ char *normal_path = "E:\\fly\\code2\\files\\liuyan.png"; char *crypt_path = "E:\\fly\\code2\\files\\liuyan_crypt.png"; char *decrypt_path = "E:\\fly\\code2\\files\\liuyan_decrypt.png"; //加密 //crypt(normal_path,crypt_path,"hello"); //解密 decrypt(crypt_path,decrypt_path,"hello"); }打开所在的文件夹:(先加密再解密)
-----------完---------