C语言快速讲解(六)联合体、枚举、IO
来源:互联网 发布:ps mac 2017中文zh cn 编辑:程序博客网 时间:2024/06/15 06:45
前言:作为一个安卓程序员,如果不懂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字符表示操作二进制文件binaryFILE *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 filewhile ((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");}打开所在的文件夹:(先加密再解密)
-----------完---------
阅读全文
1 0
- C语言快速讲解(六)联合体、枚举、IO
- c语言基础(七)联合体和枚举
- C语言系列(六)结构体和联合体
- C语言系列(六)结构体和联合体
- C语言系列(六)结构体和联合体
- android ndk 05 C语言 _union_enum 联合体 枚举 IO文件操作(文件加密解密)
- C语言-结构体+联合体+枚举
- Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针
- C笔记 联合体 枚举
- 用C语言联合体和枚举描述数据库
- C语言学习笔记10-结构体、枚举、联合体
- C语言基础及指针⑨联合体与枚举
- (四)C语言基础(结构体,联合体,枚举,别名)
- C语言结构体,联合体,枚举与typedef
- 枚举、结构体、联合体的简单应用程序-C语言
- C语言快速讲解(一)
- 从Android/Java基础之上学习C/C++语言(6)--C语言基础--联合体与枚举
- c语言的快速枚举
- Navicat for MySQL使用手记--实现自动备份数据库
- Unity3D 04-GameObject,Component,Time,Input,Physics
- 工作中遇到的一些问题集合
- 作为前端,应该知道什么是‘单元测试’?
- jsp项目web实战
- C语言快速讲解(六)联合体、枚举、IO
- 花里胡哨的名称
- Tomcat安装阿里云免费证书
- 数据库索引
- SPOJ1812:LCS2 (后缀自动机)
- Eclipse 安装 SVN 插件的两种方法
- Android-给apk文件签名
- 关于springCloud下使用resttemplate
- redis发布及订阅消息