初级(100):文件读取到内存,然后每八个字节一读取。最好有例子。 是这样的,小弟最近做一DES加密算法的问题,算法要求每8个字节进行一次加密。我是初学VC。我想知道怎样才能把一个文本文档一次读到内存中,再把文件长度取得,再从文件头每八个字节一读取。最好有示例代码把这一过程表现出来。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果文件比较大,想要一次读完就比较困难!你是8字节加密一次的,那可以这样:CFile file;char Buf[9];file.Open(...);while()根据文件大小循环将文件内容读出解密并输出{file.Read(...);解密输出}; char file[256];FILE *fp;char buf[9], tmp[9];stat f_stat;long f_size;int num;sprintf( file, "d:\\abc.txt" );_stat( file, &f_stat );f_size = f_stat.st_size; //文件长度是也,实际上下面的程序不需要这个东东,但是你想知道fp = fopen( file, "r" );while( !feof( fp ) ){ memset( buf, 0x0, sizeof( buf ) ); num = fread( buf, 1, 8, fp ); if ( num <= 0 ) break; else if ( num < 8 ) { memset( tmp, ' ', 8 ); memcpy( tmp, buf, num ); memcpy( buf, tmp, 8 ); } ...//加密以及其他处理}fclose( fp ); CFile My;int read;BYTE buf[8];My.Open(.....);do{ read = My.Read(buf,8); ChuLi(buf);}while(read==8)My.Close();你要想一次读入也可以:PBYTE buf;CFile my;int file_len;my.Open(……);file_len = my.GetLength();new buf = BYTE [file_len];my.Read(buf,file_len);my.Close();ChuLi(buf);delete [] buf; 你可以定义一个结构体如:struct { BYTE x[8]} data;再定义一个结构指针: data* a; 然后把文件读入一个字符指针:char* p;CFile::read(p,file);再进行指针转换: a = (data*)p;这样a就指向文件缓冲区的首地址,并且a的大小为8字节,若要取得后面第i个8字节只需取(a+i),其中i为1、2、3...... struct { BYTE x[8]} data;CFile f;f.open(filename,CFile::modeRead);int filelen=f.GetLength();char* p=new char[filelen+4000];f.read(p,file);data* a;a=(data*)p;以上ok Hawk_lp: 那么该怎么实现呢?比如说调用什么函数? 想使用ToolTip,主窗口就必须响应ON_NOTIFY_EX(TTN_NEEDTEXT,0,xxx)么? 关于在MFC中统一大小显示jpg图片问题! 怎么改变音频文件的音调 线程问题 vc 怎么操作word 和excel 有哪位就MFC框架下线程编程很有造诣.可以指点一下?麻烦给看一下. windows为什么要有消息机制 关于CArray的问题。在线等!! 有人晓得语音卡和voice modem么?两者有什么不同? 鼠标单击在WM_KEYDOWN里用字参数判断为什么没反应? 怎样在VC++中插入汇编语言??? HELP:我为何在vc下用ado连oracle 9i不能添加新纪录?
CFile file;
char Buf[9];file.Open(...);while()根据文件大小循环将文件内容读出解密并输出
{
file.Read(...);
解密
输出
};
FILE *fp;
char buf[9], tmp[9];
stat f_stat;
long f_size;
int num;
sprintf( file, "d:\\abc.txt" );
_stat( file, &f_stat );
f_size = f_stat.st_size; //文件长度是也,实际上下面的程序不需要这个东东,但是你想知道fp = fopen( file, "r" );
while( !feof( fp ) )
{
memset( buf, 0x0, sizeof( buf ) );
num = fread( buf, 1, 8, fp );
if ( num <= 0 )
break;
else if ( num < 8 )
{
memset( tmp, ' ', 8 );
memcpy( tmp, buf, num );
memcpy( buf, tmp, 8 );
} ...//加密以及其他处理
}fclose( fp );
int read;
BYTE buf[8];My.Open(.....);
do
{
read = My.Read(buf,8);
ChuLi(buf);
}while(read==8)
My.Close();你要想一次读入也可以:
PBYTE buf;
CFile my;
int file_len;
my.Open(……);
file_len = my.GetLength();
new buf = BYTE [file_len];
my.Read(buf,file_len);
my.Close();
ChuLi(buf);
delete [] buf;
struct
{
BYTE x[8]
} data;
再定义一个结构指针: data* a;
然后把文件读入一个字符指针:
char* p;
CFile::read(p,file);
再进行指针转换:
a = (data*)p;
这样a就指向文件缓冲区的首地址,并且a的大小为8字节,若要取得后面第i个8字节只需取
(a+i),其中i为1、2、3......
{
BYTE x[8]
} data;CFile f;
f.open(filename,CFile::modeRead);
int filelen=f.GetLength();
char* p=new char[filelen+4000];
f.read(p,file);data* a;
a=(data*)p;以上ok
那么该怎么实现呢?比如说调用什么函数?