我要把一个很小的BMP单色位图中的二进制字符读入一个unsigned char 类型的变量中,但是在位图中
424D0000000000...等数据中的00相当于'\0',只有bm可以输出,我该怎么办?

解决方案 »

  1.   

    我要二进制数据以unsigned char *的形势传入到一个函数处理(把它处理成条形码(二维的))。
      

  2.   

    '\0'指c类型字符串的结束,你又不是把它当字符串,又不把它付给字符串变量,又什么关系。memcpy直接拷,给出长度。还得new一个区域或事先定义好的区域。
      

  3.   

    CFile fLoadBinary;
        CFileException e;    CFileDialog fdlgLoadBinary(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"All Files(*.*)|*.*",NULL);
        if (fdlgLoadBinary.DoModal() != IDOK) return;
        strcpy(m_cBinaryFileName,fdlgLoadBinary.GetPathName());     if (!fLoadBinary.Open(m_cBinaryFileName,CFile::modeRead | CFile::typeBinary,&e)){
            CString msg;
            msg = "Can`t open file!\n";
            msg += e.m_cause ;
            AfxMessageBox(msg);
            return;
        }
        if (m_pcBuffer != NULL) {
            delete []m_pcBuffer;
            m_pcBuffer = NULL;
        }
        unsigned int uiFileLength =fLoadBinary.GetLength();
        m_pcBuffer = new char[uiFileLength + 1];
        memset(m_pcBuffer,0x00,uiFileLength + 1);
        UINT nReadBytes = fLoadBinary.Read(m_pcBuffer,uiFileLength);
        AfxMessageBox(m_pcBuffer);  //这只显示BM?
        m_pcBuffer[uiFileLength]= '\0';
        
        GetDlgItem(IDC_EDIT_INPUTDATA)->SetWindowText(m_pcBuffer);
      

  4.   

    AfxMessageBox(m_pcBuffer);  处理的是字符串,当然如此!
    m_pcBuffer[uiFileLength]= '\0';《--加什么,把字符串忘掉。
    记住m_pcBuffer的地址和长度就够了,是二进制数据,不再是字符串了!