读书人

急CFile读取文件后如何把文件中的内容

发布时间: 2012-12-14 10:33:07 作者: rapoo

急~~~~~~CFile读取文件后怎么把文件中的内容以十六进制数转存到u_char array中
在做一个测试程序,把图片文件打包成自定义格式的以太网帧。分割用的是下面的class,发送用WinPcap现在用CFile读取图片后能把数据分成小块并写出。怎么把每个分割后的数据写入u_char中啊?C++/MFC新手。。请多加指教


C/C++ code
const char FramePacker::_leadercode[8] = {0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAB};void FramePacker::SetDestMac(char * lpDestMac){    memcpy(_destmac,lpDestMac,6);}void FramePacker::SetSourMac(char * lpSourMac){    memcpy(_sourmac,lpSourMac,6);}void FramePacker::SetInputFile(CString & in_file){    _fi = in_file;}void FramePacker::SetOutputFile(CString & out_file){    _fo = out_file;}DWORD FramePacker::PackUp(void){    CFile       * fo,fi(_fi,CFile::typeBinary | CFile::modeRead | CFile::shareDenyWrite);    ULONGLONG   in_size = fi.SeekToEnd();    int         frame_len,id = 0;    bool        bMultiFile = false;    BYTE        b;    fi.SeekToBegin();    if(in_size > MAX_DATA_SIZE)    {        bMultiFile = true;    }    while(in_size > 0)    {        char            buf[MAX_DATA_SIZE];        CString         file_name(_fo);                if(bMultiFile)            file_name.Format("%s%03d",_fo,id ++);        fo = new CFile(file_name,CFile::modeCreate | CFile::typeBinary | CFile::modeWrite | CFile::shareDenyWrite);                if(fo != NULL)        {            if(in_size < MIN_DATA_SIZE)            {                fi.Read(buf,in_size);                _len = NOT_DATA_LEN + in_size;                frame_len = MIN_DATA_SIZE;                in_size = 0;            }            else if(in_size > MAX_DATA_SIZE)            {                fi.Read(buf,MAX_DATA_SIZE);                _len = 1518;                frame_len = MAX_DATA_SIZE;                in_size -= MAX_DATA_SIZE;            }            else            {                fi.Read(buf,in_size);                _len = in_size + NOT_DATA_LEN;                frame_len = in_size;                in_size = 0;            }            fo->Write(_leadercode,8);            fo->Write(_destmac,6);            fo->Write(_sourmac,6);                    b = HIBYTE(_len);  // network order            fo->Write(&b,1);            b = LOBYTE(_len);            fo->Write(&b,1);                        fo->Write(buf,frame_len);            CCrc32Static::FileCrc32Win32(file_name,_crc);                        fo->Write(&_crc,4);            fo->Close();        }        else        {            break;        }        delete fo;    }    if(! bMultiFile)    {        return _crc;    }    else        return 0;}

读书人网 >VC/MFC

热点推荐