小弟是个新手现在用mfc做个串口发送的程序,程序是这样的,从edit控件输入字符,然后放到一个数组里,通过串口发送出去,请前辈们帮忙
CString str;
unsigned char send[1024];
GetDlgItem(IDC_AddEdit)->GetWindowText(str);

到这里就做不下去了,控件的内容也已经获得了

解决方案 »

  1.   

    send_func((LPBYTE)(LPCSTR)str, str.GetLength());
      

  2.   

    CString str;
    unsigned char send[1024];
    int length = GetDlgItem(IDC_AddEdit)->GetWindowText((LPTSTR)send, sizeof(send)/sizeof(TCHAR))*sizeof(TCHAR);
      

  3.   

    你是不是不会发送,楼上的已经告诉你怎么样获得edit控件上的信息?
      

  4.   

    还有一点不明白,假如我在控件里输入的是中文“中国”,得到的是内码 中D6D0 国B9FA,我的数组是unsigned char类型的,那么储存到数组的时候是怎样的呢?
    send[0] = D6
    send[1] = D0
    send[2] = B9
    send[3] = FA     是这样的吗?这样的话,发送出去的是4个字节了是吗?现在我的通讯协议是这样的,要发送一串数据出去,这串数据包含起始,数据长度,命令,数据N(就是编辑框里的数据),CRC校验(根据发送的这串数据计算的来的两个字节数据),结束我的目的是把控件里的数据取出,得出字节数,然后再赋给另一个数组(这个数组里有数据长度,CRC等),然后通过串口发送出去
    新手,碰到的问题比较多,努力中,,,前辈们帮忙!!!
      

  5.   

    CString str; 
    unsigned char send[1024]; 
    int length = GetDlgItem(IDC_AddEdit)->GetWindowText((LPTSTR)send, sizeof(send)/sizeof(TCHAR))*sizeof(TCHAR);
    按照3楼的做法,是可以了,但是有个问题来了,我向在发送的时候,如果输入的是中文,那么就发送中文内码,如果输入的是英文直接发送ASCII码即可我试着使用3楼的方法,如果输入中文可以,如果输入的是英文的话,同样也是占用两个字节,第一个字节是该字符的ASCII码,第二个字节是个0,不符合下位机的要求
      

  6.   


    你的是Unicode工程,有两个办法
    1、工程改为多字节
    或者
    2、将得到的字符串用WideCharToMultiByte()转为多字节。具体用法查msdn,有例子。
      

  7.   


    再个你既然使用MFC,可以将char改为TCHAR,这样的话,如果你使用的是UNICODE字符集的话编译时会自动转化为双字节存储,如果你使用的是ASNIC编码,编译时会自动转化为单字节存储方式!当然在对方接收到这些数据时,这些数据都是一个字符占两个字节,如果你需要还原为ASCII码的话肯定要转化下了,有专门的函数,8楼已经提到了,这就已经很简单了!