我现在需要把BMP的数据读出来,从串口发送出去。现在基本过程都已完成了,就是遇到一个问题:
  
读出的BMP数据(存于buffer里)前几个字节都是0x00,我用以下代码转换成CString时发现buffer前面的几个0x00都没有了。请高手指教,急用!! for(int k=0;k<=info.bmiHeader.biSizeImage;k++)    //将数组转换为Cstring型变量
{
BYTE bt=*(buffer+k);                     //字符型
str2.Format("%c",bt);                    //将字符送入临时变量strtemp存放
                           m_strTXData+=str2;                       //加入发送编辑框对应字符串    
}
m_ctrlComm.SetOutput(COleVariant(m_strTXData));   //串口发送

解决方案 »

  1.   

    问题的关键是,为什么你非得用CString来做缓冲区呢?自己声明一个BYTE数组不可以吗?
      

  2.   

    这里需要理解一个概念,
    如果用0x00表示,后面代表的是一个整数。怀疑你把他转化为字符串了。而CString保存的是字符串,所以这两个类型就不一样。
      

  3.   

    数据有0x00就不适合用CString了
    你可以用CArray<BYTE,BYTE>
      

  4.   

    有0x00 就不是标准的string 了,还是按楼上说的创建个数组.
      

  5.   

    图片数据确实不该拿CString放,本来就应该使用BYTE数组
      

  6.   

    问题是数组怎么发送出去呢?
    目前我只知道这个函数m_ctrlComm.SetOutput(COleVariant(m_strTXData)); 
      

  7.   

    按字节 放到SafeArray中啊。
      

  8.   

    《串口通讯编程实践》上不是说的很清楚吗??用memcpy,后面跟上字符串长度就可以了!!
      

  9.   

    akirya兄,能否把这部分代码写一下,我刚接触MFC,就被老总逼着做这个,对CArray 不了解。
     我现在的目的是将 unsigned char buffer[800](里面有0x00,0x20,0x1b等)中的所有的数据
    从串口m_ctrlComm.SetOutput()发送出去。
    具体怎么把buffer[800]转换成m_ctrlComm.SetOutput()能用的参数类型我就不会了。
      

  10.   

    你参考下
    // x.cpp : 定义控制台应用程序的入口点。
    //#include "stdafx.h"
    #include "x.h"
    #include <atlsafe.h>
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    // 唯一的应用程序对象CWinApp theApp;using namespace std;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    int nRetCode = 0; // 初始化 MFC 并在失败时显示错误
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
    // TODO: 更改错误代码以符合您的需要
    _tprintf(_T("错误: MFC 初始化失败\n"));
    nRetCode = 1;
    }
    else
    {
    // TODO: 在此处为应用程序的行为编写代码。        CComSafeArray<unsigned char> arr(800);
            unsigned char buffer[800] ={ 0 ,1,2,3};
            for ( int i=0;i<800;i++)
                arr.SetAt( i , buffer[i] );        VARIANT var;
            var.vt = VT_BYREF|VT_UI1;
            var.parray = arr.Detach();        COleVariant olevar( var );        puts("a"); } return nRetCode;
    }
      

  11.   

    这个,我做过的。char ch = 0;CString myStr ="";myStr + = ch;
    myStr + = ch;
    myStr + = ch;int i = myStr.GetLength();发现了吗? i==3了。我想,你应该知道 接下来,怎么做了。
      

  12.   

    “0x00”是串(CString)的结束标记(又且仅有1个)
      

  13.   

    可以使用Base64编码对字节数组编码成字符串存入CString。然后再解码。
      

  14.   

    // MSComm设置为2进制方式,将buf直接复制给VARINT