利用C语言,进行文件读写
读文件,写文件
#include#include //将array_read指向的data_length个元素存储到path对应的路径中 int read_raw_hex_data(char path[], int data_length, double array_read[]) { FILE* fpRead = NULL; int i = 0; fopen_s(&fpRead, path, "r"); if (fpRead == NULL) { printf("Fail to read raw data file!"); return -1; } for (i = 0; i < data_length; i++) { fscanf_s(fpRead, "%lf", &array_read[i]); } fclose(fpRead); return 0; } //将array_read指向的data_length个元素存储到path对应的路径中 int save_data(char path[], int data_length, double array_write[]) { FILE* fpWrite = NULL; int i = 0; fopen_s(&fpWrite, path, "w"); if (fpWrite == NULL) { printf("Failed to save data!"); exit(1); } for (i = 0; i < data_length; i++) { fprintf(fpWrite, "%.20lf ", array_write[i]); if ((i + 1) % 5 == 0)fprintf(fpWrite, "n"); } fclose(fpWrite); return 0; } int main() { double a[20]; int data_length = 20; char path[40] = "./data_file/1.txt"; for (int i = 0; i < 20; i++) a[i] = i*2.5+1e-18; save_data(path, data_length, a); read_raw_hex_data(path, data_length, a); for (int i = 0; i < 20; i++) { printf("%.20lf ",a[i]); if ((i + 1) % 5 == 0)printf("n"); } return 0; }
BMP图片格式简单梳理
经查阅资料,选择BPM(bitmap)格式,C语言可以直接打开,头文件在#include
链接C语言实现BMP图像处理(直方图均衡化) - 百度文库
Q3怎么提取像素值,获得所需实验图片数据
C语言实现对BMP文件的单通道图像以及灰度图提取 - 王敬斯 - 博客园
此链接而文档的数据是我初始编写读取bmp文件代码的主要参考链接,以至于误导我在完成加密后获得的灰度图像后,读取灰度图像时仍然采用fseek(fp, sizeof(RGBQUAD), 1);语句而没有及时改为fread(pColorTable11, sizeof(RGBQUAD), 256, fp);,我曾进行多次排查错误,找了好几天,最后终于发现是这里出现问题,再次检查加密算法,尝试对每一个像素点进行简单的处理,如都与1异或(结果图片加密解密后变化不大),我又试图每个像素点依次对1,2,3,…,255,1,2,3,…,255,1循环,发现图像加密后有变化了,但是解密无法复原,多次进行发现仍然是这个结果,图片的含义就是对应英文意思,上图是我已经找到出错点,那就是没有后的运行结果图,成也萧何,败也萧何,我打印输出中间的运行结果,发现确实对不上,如上图。
最后,怎么想到解决这个问题的,没办法了,去再找资料,看视频,可是视频里也没说要怎么读灰度图像,只是偶然在一个视频里看到这个
于是,我想,可能这里有问题,调色板不是必须的吗,至少对于灰度图像,那我在写的时候就不写这个调色板,我看看我的数据是否出现错误,这下不出现错误了,如下图
不过,由于没有调色板,在windows下看不到我加密后的图片了,应该是格式无法解析。。。
我再次看视频,找链接,找错误,这次我认准了,哪里都没有出错,就是读文件读得不对,下面的链接再次进入我的视野https://blog.csdn.net/weixin_32469089/article/details/117142339?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165734166716781435411776%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165734166716781435411776&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~pc_rank_34-3-117142339-null-null.142^v32^pc_rank_34,185^v2^control&utm_term=c%E8%AF%AD%E8%A8%80bmp%E5%A4%84%E7%90%86&spm=1018.2226.3001.4187
起初找图片资料的时候,我也找了这个网站,由于只有代码,没有图片,我没有用,也没有细看,这次我看到读取的不正是我要的灰度图像吗,我马上看了看前面的代码,找到那句话,应用到我的代码里,成功了,问题解决。
记住:8bit灰度图片需要调色板,存储的时候和读取的时候都要。
Q4对于问题三中的图像素材,由于网站里大部分都有水印,在下面的网址里找到了素材original image: Lena
打开图片,另存为设置为bmp文件即可
起初,我是先用彩色图片转化为灰度图片,对于得到的灰色图片,进行加密解密处理,实际可以直接对灰色图片加密解密处理
Q6BMP基本知识https://blog.csdn.net/imxlw00/article/details/124926918?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165734166716781435411776%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165734166716781435411776&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~pc_rank_34-10-124926918-null-null.142^v32^pc_rank_34,185^v2^control&utm_term=c%E8%AF%AD%E8%A8%80bmp%E5%A4%84%E7%90%86&spm=1018.2226.3001.4187
结构体对齐规则



