android ndk 05 C语言 _union_enum 联合体 枚举 IO文件操作(文件加密解密)
来源:互联网 发布:angelababy百花奖知乎 编辑:程序博客网 时间:2024/05/17 23:11
联合体(共用体)
//联合体(共用体)//不同类型的变量共同占用一段内存(相互覆盖),联合变量任何时刻只有一个成员存在,节省内存//联合体变量的大小=最大的成员所占的字节数//比喻:同穿一条裤子#include <stdio.h>#include <stdlib.h>union MyValue{ int x; int y; double z;};void main(){ union MyValue d1; d1.x = 10; d1.y = 90; /*最后一次赋值有效 ??? 为什么我这里必须药用这种注释才可以 双斜杠 会提示未闭合*/ /*d1.z = 23.8;*/ printf("d1.x = %d\n,d1.y = %d\n,d1.z = %lf\n", d1.x, d1.y, d1.z); system("pause");}
联合体有什么好处? 因为联合体包含很多种类型 当传递参数的时候不确定的情况下可以使用联合体,只要是在联合体内的都行. PS 有点像java的泛型
举例: jni的源码里面也有这个联合体 可以参考下
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, Wednesday, Thursday, Friday, Saturday, Sunday};void main(){ //枚举的值,必须是括号中的值// enum Day d = Monday; printf("%#x,%d\n", &d, d); getchar();}
文件 IO流操作
文件的读取 (文本)
#define _CRT_SECURE_NO_WARNINGS#include "stdlib.h"#include "stdio.h"#include "string.h"//注意这里的宏定义 没有会报错////读取文本文件void main(){ char *path = "E:\\code\\testIO.txt"; //打开 FILE *fp = fopen(path, "r"); if (fp == NULL){ printf("文件打开失败.."); return; } //读取 char buffer[50];//缓冲 while ((fgets(buffer, 50, fp))){ printf("%s", buffer); } //关闭 fclose(fp); system("pause");}
结果图
文件的写入
//写入文本文件void main(){ char *path = "E:\\code\\testIO_new.txt"; //打开 FILE *fp = fopen(path, "w"); char *text = "sadfasdf这是新写入的数据 测试下开口"; fputs(text, fp); //关闭流 fclose(fp); system("pause");}
下面是效果图
文件的复制
//文件的复制(使用二进制的方式)void main(){ char *read_path = "E:\\code\\cat.jpg"; char *write_path = "E:\\code\\cat_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); system("pause");}
结果图
获取文件的大小
void main(){ char *read_path = "E:\\code\\cat.jpg"; FILE *fp = fopen(read_path, "r"); //重新定位文件指针 //SEEK_END文件末尾,0偏移量 fseek(fp, 0, SEEK_END); //返回当前的文件指针,相对于文件开头的位移量 long filesize = ftell(fp); printf("%d\n", filesize); getchar();}
结果图
/*“rt” 只读打开一个文本文件,只允许读数据“wt” 只写打开或建立一个文本文件,只允许写数据“at” 追加打开一个文本文件,并在文件末尾写数据“rb” 只读打开一个二进制文件,只允许读数据“wb” 只写打开或建立一个二进制文件,只允许写数据“ab” 追加打开一个二进制文件,并在文件末尾写数据“rt+” 读写打开一个文本文件,允许读和写“wt+” 读写打开或建立一个文本文件,允许读写“at+” 读写打开一个文本文件,允许读,或在文件末追加数据“rb+” 读写打开一个二进制文件,允许读和写“wb+” 读写打开或建立一个二进制文件,允许读和写“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据*/
练习: 文本文件加解密
//异或
//规则:1^1=0, 0^0=0, 1^0=1, 0^1=1 同为0,不同为1
//加密
//异或//规则:1^1=0, 0^0=0, 1^0=1, 0^1=1 同为0,不同为1//加密void crpypt(char normal_path[],char crypt_path[]){ //打开文件 FILE *normal_fp = fopen(normal_path, "r"); FILE *crypt_fp = fopen(crypt_path, "w"); //一次读取一个字符 int ch; while ((ch = fgetc(normal_fp)) != EOF){ //End of File //写入(异或运算) 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){ //End of File //写入(异或运算) fputc(ch ^ 9, crypt_fp); } //关闭 fclose(crypt_fp); fclose(normal_fp);}
== 主函数调用—-
void main(){ char *normal_path = "E:\\dongnao\\vip\\ndk\\08_08_C_05\\files\\friends.txt"; char *crypt_path = "E:\\dongnao\\vip\\ndk\\08_08_C_05\\files\\friends_crypt.txt"; char *decrypt_path = "E:\\dongnao\\vip\\ndk\\08_08_C_05\\files\\friends_decrypt.txt"; //crpypt(normal_path, crypt_path); //解密 decrpypt(crypt_path, decrypt_path); getchar();}
调用加密结果
调用解密结果
下面是 二进制文件的加密解密(文件 图片 exe程序 都行)
void crypt(char normal_path[], char crypt_path[], char password[]){ //打开文件 FILE *normal_fp = fopen(normal_path, "rb"); FILE *crypt_fp = fopen(crypt_path, "wb"); //一次读取一个字符 int ch; int i = 0; //循环使用密码中的字母进行异或运算 int pwd_len = strlen(password); //密码的长度 while ((ch = fgetc(normal_fp)) != EOF) { fputc(ch ^ password[i % pwd_len], crypt_fp); i++; } fclose(normal_fp); fclose(crypt_fp);}void main(){ char *normal_fp = "E:\\code\\cat_norm.jpg"; char *encryption_fp = "E:\\code\\cat_crypt.jpg"; char *decrpty_fp = "E:\\code\\cat_decrypt.jpg"; //加密 crypt(normal_fp, encryption_fp,"mypassworld"); system("pause");}
加密结果
解密代码
void crypt(char normal_path[], char crypt_path[], char password[]){ //打开文件 FILE *normal_fp = fopen(normal_path, "rb"); FILE *crypt_fp = fopen(crypt_path, "wb"); //一次读取一个字符 int ch; int i = 0; //循环使用密码中的字母进行异或运算 int pwd_len = strlen(password); //密码的长度 while ((ch = fgetc(normal_fp)) != EOF) { fputc(ch ^ password[i % pwd_len], crypt_fp); i++; } fclose(normal_fp); fclose(crypt_fp);}void decrypt(char crypt_path[], char decrypt_path[], char password[]){ //打开文件 FILE *crypt_fp = fopen(crypt_path, "rb"); FILE *decrypt_fp = fopen(decrypt_path, "wb"); //一次读取一个字符 int ch; int i = 0; //循环使用密码中的字母进行异或运算 int pwd_len = strlen(password); //密码的长度 while ((ch = fgetc(crypt_fp)) != EOF) { fputc(ch ^ password[i % pwd_len], decrypt_fp); i++; } fclose(crypt_fp); fclose(decrypt_fp);}void main(){ char *normal_fp = "E:\\code\\cat_norm.jpg"; char *encryption_fp = "E:\\code\\cat_crypt.jpg"; char *decrpty_fp = "E:\\code\\cat_decrypt.jpg"; //加密 //crypt(normal_fp, encryption_fp, "mypassworld"); //解密 decrypt(encryption_fp, decrpty_fp, "mypassworld"); system("pause");}
解密结果:
练习 文件的分割以及合并
阅读全文
0 0
- android ndk 05 C语言 _union_enum 联合体 枚举 IO文件操作(文件加密解密)
- C语言实现简单文件加密解密
- C语言实现文件加密解密
- C语言文件加密解密软件
- C语言文件IO操作
- C语言快速讲解(六)联合体、枚举、IO
- ndk学习笔记C语言文件加解密
- c语言实现记事本文件的 DES加密 解密
- C语言实现任何文件的加密解密
- C语言之文件的加密与解密
- 【C语言】IO--文件操作要点
- Thread+IO文件的加密解密
- Android AES 文件加密解密
- Android AES 文件加密解密
- Android AES 文件加密解密
- Android 视频&文件,加密 解密
- c语言文件加密
- c语言-文件io
- opencv 安装
- 自定义ThreadFactory和ThreadGroup
- EU4-42: Attending a networking event
- yiic命令时提示“php.exe”不是内部或外部命令的解决方法
- Kotlin Android Studio 环境搭建
- android ndk 05 C语言 _union_enum 联合体 枚举 IO文件操作(文件加密解密)
- 重入锁和自旋锁(公平锁及非公平锁)
- Android pppd_gprs脚本启动过程
- 可见性和原子性
- Latex排版学习笔记(1)——希腊字母表及其在latex中的表示
- 支付宝第三方接口对接(JAVA语言)
- 进程和应用程序的区别(简单理解)
- 牛客网 Wannafly模拟赛2 树 dp+思维
- 在线画图工具