01文件循环位移加密 C预处理宏2015/08/24
2015-08-26 21:20
288 查看
文件循环位移加密
核心代码加密函数
void encrypt(char *str, int len) { int i = 0; for (i = 0; i < len; i++) { unsigned char data = *str; //一定转成unsigned不然负数进行右移的时候会不可预知 if (*str == 0) { str++; } else { *str = data<<1 | ((data&(1<<7))>>7); str++; } } }
解密函数
void de_encrypt(char *str, int len) { int i = 0; for (i = 0; i < len; i++) { unsigned char data = *str; if (*str == 0) { str++; } else { *str = data>>1 | ((data&1)<<7); str++; } } }
文件处理函数
FILE *fp1 = fopen("e:\\tmp\\1.jpg", "rb"); FILE *fp2 = fopen("e:\\tmp\\2.jpg", "wb"); int n; char buf[1024]; char * key = "nimeiya"; while((n = fread(buf,1,1024,fs))>0) { encrypt(buf,n,key); fwrite(buf,1,n,fd); }
C预处理
不带参数的宏
#define MAX 10
如果使用宏来定义数据类型
#define CHAR char* CHAR p1,p2 sizeof("%d, %d\n", sizeof(p1), sizeof(p2)); //结果4,1
因为p1是类型char*,p1是char类型,所以定义变量使用typedef最好
带参数的宏
#define SUM(a,b) (a)*(b)
1、SUM(a,b)里面,SUM和括号之间不能有空格, `#define SUM (a,b) (a)*(b)`,这样就是把'SUM'替换成`(a,b) (a)*(b)`; 2、一定不能吝啬括号,像'(a)*(b)'一定要单独用括号包含起来,不然如果'SUM(2+3)'就会变成'(2+3*2+3)',结果就不是你想得到的结果, 3、'#undef SUM(a,b)'取消宏定义
利用宏创建字符串
#define str(x) "aaaaaaaa"#x"bbbbbbbb" int main() { printf("%s\n", str(100)) }
结果
aaaaaaaa100bbbbbbbb
粘合剂 #运算符
#define SUM(a,b) (a##a+b##b) void main() { printf("%d\n", SUM(2,3)) //SUM(2,3)====22+33 }
宏选择 #if #elif #endif(多选一)
跨平台模型#include <stdio.h> #define IOS 1 #define ANDROID 2 #define WPHONE 3 #define MACHINE IOS//IOS ANDROID WPHONE int main(void) { #if MACHINE == IOS printf("this is IOS code\n"); #elif MACHINE == ANDROID printf("this is ANDROID code\n"); #elif MACHINE == WPHONE printf("this is WPHONE code\n"); #endif }
pragma宏命令
#pragma pack(1) //按1字节对齐 struct mystruct { char a; short b; int c; char d; }; sizeof(struct mystruct) == 8;
补码
负数转补码 确定是负数---->这个数取绝对值------->然后把这个数按位取反+1 正数不变 按照这个原则,不需要理会符号位,按照补码规则会把符号位置一的 内存里面存的全是补码,还有内存里面只是0、1,不会有正负数,正负数都是按照特定规则解释的正数还是附属的
数据类型隐式转换
unsigned int a = 6; int b = -20; (a+b)>6?puts(">6"):puts("<=6");
结果是大于
>6
原因是以为无符号类型int和有符号int进行运算,结果会自动转化成无符号int,所以’-16’如果化成无符号数是一个特别大的数,所以>6;
相关文章推荐
- Windows Azure Active Directory (3) China Azure AD增加新用户
- Xcode中 黄色文件夹与蓝色文件夹的个人反思
- arcgis sever发布地图服务,使用arcmap版本不同发布不成功的探讨
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B. Minimization 贪心 dp
- ACM网络流模板 最大流ISAP URAL1774
- JavaSE基础整理1-基本概念
- BMP文件头设置要点
- 【全网首发】zabbix如何实现微信报警
- V4L2驱动程序架构
- 将数组元素循环右移k个位置(Java实现)
- 写个dll,引用了自己的lib,lib引用进去了,还老是报错
- 实现前台文字显示字数,当多于一定数量时,用...代替
- 线性表(1)--基础知识
- sql server 2005只有.mdf文件如何附加
- UVA 11859 Division Game (Nim博弈)
- Unity游戏开发中的对象池
- jsonp模拟获取百度搜索相关词汇
- Spring Data Jpa配置
- Spring笔记②--各种属性注入
- mysql 对取当前日期周一和周日语句的详细解析