急~~~~~~CFile读取文件后怎么把文件中的内容以十六进制数转存到u_char array中


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



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

2 个解决方案

#1


举个例
Class CPicture;
unsigned char des[1000];
unsigned char *src;
CPicture p1;
src = (UCHAR *)&p1;
memcpy(des,src,sizeof(CPicture));

#2


多谢。
我最后还是放弃Cfile了
关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com