CFile--以二进制的方式读取图片文件,并且给读取的数据增加头数据、尾数据,简称简单加密操作

本文详细介绍了如何使用C语言API以二进制方式读取和写入文件,包括文件打开、数据读取、内存分配、数据写入等步骤,并演示了如何在数据前后添加特定的十六进制标记。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要以二进制的方式读取一个文件。在此,我用的是fopen的方式,方便又直观

1:准备好需要的头文件

因为用到了C的API,应该加上  #include<stdio.h>

2:打开文件

FILE *p = fopen(strSourceFile , "rb");
if(p == nullptr)
    AfxMessageBox(_T("文件不存在,打开失败!"));

这种形式是以二进制的方式打开的。

在这里,有个需要注意的是,传入的文件名必须是char* 类型的数据。

如果你传入的数据是CString的,也没有关系,可以用下面的方式进行转换

2.1:类型转换

char* chFilename;
CStringA strFilenameA;
strFilenameA= CT2A(strFilename);
chFilename= strFilenameA.GetBuffer();
strFilenameA.ReleaseBuffer();

其中,chFilename就是转换好的文件名称

3:获取图片文件的长度

int nlength = _filelength(_fileno(p));  //得到图像的长度

4:开辟一块区域用来存储数据

因为要给原来的数据增加  头数据、尾数据,所以,申请的内存应该比以前的多两个

int nLen = nlength + 3;
unsigned char* a = new unsigned char[nLen];

开始位置增加一个头数据

a[0]=0x88;

我就以增加一个16进制数据作为例子

5:读取图片文件中的内容

fread(a+1, sizeof(unsigned char),nlength,p);

因为在开始的位置增加了一位,所以,当我们读取图片文件中的数据时,需要从第一位开始(位置发生了偏移)。

在尾部增加一个尾数据

a[nLen-1]=0x88;

为了简单体现,我也将尾数据设置成了一个16进制数据

6:存储新的数据信息

将修改好的数据信息存到一个新的文件中,也是以二进制的方式。

FILE *q = fopen(strGenerateFile , "wb");
fwrite(a , sizeof(unsigned char) , nLen, q);
fclose(q);

7:释放资源

fclose(p);
delete []a;

package { import flash.display.Bitmap; import flash.display.Loader; import flash.display.NativeMenu; import flash.display.NativeMenuItem; import flash.display.NativeWindow; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.filesystem.File; import flash.filesystem.FileMode; import flash.filesystem.FileStream; import flash.net.FileFilter; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.utils.ByteArray; public class Main extends Sprite { private var rootMenu:NativeMenu = new NativeMenu; private var fileMenu:NativeMenu = new NativeMenu; private var openItem:NativeMenuItem = new NativeMenuItem("打开文件"); private var quitItem:NativeMenuItem = new NativeMenuItem("退出"); private var helpMenu:NativeMenu = new NativeMenu; private var fsnhf:NativeMenuItem = new NativeMenuItem("00"); private var window:NativeWindow = stage.nativeWindow; private var loader:Loader = new Loader; private var imageFileFilter:FileFilter = new FileFilter("图片(*.jpg;*.png;*.gif;*.jpeg)", "*.jpg;*.png;*.gif;*.jpeg"); public function Main():void { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; buildMenu(); configListeners(); } private function buildMenu():void { rootMenu.addSubmenu(fileMenu, "文件"); fileMenu.addItem(openItem); fileMenu.addItem(quitItem); rootMenu.addSubmenu(helpMenu, "帮助"); helpMenu.addItem(fsnhf); window.menu = rootMenu; } private function configListeners():void { openItem.addEventListener(Event.SELECT, eventHandler); quitItem.addEventListener(Event.SELECT, eventHandler); fsnhf.addEventListener(Event.SELECT, eventHandler); } private function eventHandler(event:Event):void { switch(event.target) { case openItem: var file:File = new File; file.addEventListener(Event.SELECT, selectFile); file.browseForOpen("打开文件", [imageFileFilter]); break; case quitItem: window.close(); break; case fsnhf: navigateToURL(new URLRequest("00")); break; } } private function selectFile(event:Event):void { var file:File = event.target as File; var stream:FileStream = new FileStream; stream.open(file, FileMode.READ); var bytes:ByteArray = new ByteArray; stream.readBytes(bytes, 0, stream.bytesAvailable); stream.close(); loader.unload(); loader = new Loader; loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); loader.loadBytes(bytes); addChild(loader); } private function imageLoaded(event:Event):void { event.target.removeEventListener(Event.COMPLETE, imageLoaded); var bitmap:Bitmap = Bitmap(event.target.loader.content); window.width = bitmap.width; window.height = bitmap.height + 30; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糯诺诺米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值