是这样的,小弟最近做一DES加密算法的问题,算法要求每8个字节进行一次加密。我是初学VC。我想知道怎样才能把一个文本文档一次读到内存中,再把文件长度取得,再从文件头每八个字节一读取。最好有示例代码把这一过程表现出来。

解决方案 »

  1.   

    如果文件比较大,想要一次读完就比较困难!你是8字节加密一次的,那可以这样:
    CFile file;
    char Buf[9];file.Open(...);while()根据文件大小循环将文件内容读出解密并输出
    {
    file.Read(...);
    解密
    输出
    };
      

  2.   

    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 );
      

  3.   

    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;
      

  4.   

    你可以定义一个结构体如:
    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......
      

  5.   

    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
      

  6.   

    Hawk_lp:
         那么该怎么实现呢?比如说调用什么函数?