2 个解决方案
#1
你最好确定一个发送到数据和接收的数据的BYTE流是否相同,
比如你发一个汉字 BYTE数据为 0xABCD 你接收到也应该是0xABCD,这样再来考虑为什么乱码.
如果相同,还是乱码,那应该是字符集环境不同
比如你发一个汉字 BYTE数据为 0xABCD 你接收到也应该是0xABCD,这样再来考虑为什么乱码.
如果相同,还是乱码,那应该是字符集环境不同
#2
那我怎没知道它们的BYTE流呢!我的只能发送和接收数字和字母!
m_ctrMscomm.put_Output(COleVariant(m_strEditTxData));//发送数据
下面是消息处理函数
void CSerialPortDlg::OnCommMscomm() //串口事件的消息处理函数
{
// TODO: Add your message handler code here
//m_ctrMscomm.put_RThreshold(1);
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
wchar_t rxdata[2048]; //设置BYTE数组
CString strtemp;
if(2==m_ctrMscomm.get_CommEvent()) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrMscomm.get_Input();//读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format(L"%c",bt); //将字符送入临时变量strtemp存放
m_strEditRxData+=strtemp; //加入接收编辑框对应字符串
rxcount=strtemp.GetLength()+rxcount;
m_strStaticRxcount.Format(L"%ld", rxcount);
GetDlgItem(IDC_STATIC_RXCOUNT)->SetWindowText(m_strStaticRxcount);
}
}
UpdateData(FALSE); //更新编辑框内容
}
请大家帮忙看一下!谢谢啦!
m_ctrMscomm.put_Output(COleVariant(m_strEditTxData));//发送数据
下面是消息处理函数
void CSerialPortDlg::OnCommMscomm() //串口事件的消息处理函数
{
// TODO: Add your message handler code here
//m_ctrMscomm.put_RThreshold(1);
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
wchar_t rxdata[2048]; //设置BYTE数组
CString strtemp;
if(2==m_ctrMscomm.get_CommEvent()) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrMscomm.get_Input();//读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format(L"%c",bt); //将字符送入临时变量strtemp存放
m_strEditRxData+=strtemp; //加入接收编辑框对应字符串
rxcount=strtemp.GetLength()+rxcount;
m_strStaticRxcount.Format(L"%ld", rxcount);
GetDlgItem(IDC_STATIC_RXCOUNT)->SetWindowText(m_strStaticRxcount);
}
}
UpdateData(FALSE); //更新编辑框内容
}
请大家帮忙看一下!谢谢啦!
#1
你最好确定一个发送到数据和接收的数据的BYTE流是否相同,
比如你发一个汉字 BYTE数据为 0xABCD 你接收到也应该是0xABCD,这样再来考虑为什么乱码.
如果相同,还是乱码,那应该是字符集环境不同
比如你发一个汉字 BYTE数据为 0xABCD 你接收到也应该是0xABCD,这样再来考虑为什么乱码.
如果相同,还是乱码,那应该是字符集环境不同
#2
那我怎没知道它们的BYTE流呢!我的只能发送和接收数字和字母!
m_ctrMscomm.put_Output(COleVariant(m_strEditTxData));//发送数据
下面是消息处理函数
void CSerialPortDlg::OnCommMscomm() //串口事件的消息处理函数
{
// TODO: Add your message handler code here
//m_ctrMscomm.put_RThreshold(1);
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
wchar_t rxdata[2048]; //设置BYTE数组
CString strtemp;
if(2==m_ctrMscomm.get_CommEvent()) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrMscomm.get_Input();//读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format(L"%c",bt); //将字符送入临时变量strtemp存放
m_strEditRxData+=strtemp; //加入接收编辑框对应字符串
rxcount=strtemp.GetLength()+rxcount;
m_strStaticRxcount.Format(L"%ld", rxcount);
GetDlgItem(IDC_STATIC_RXCOUNT)->SetWindowText(m_strStaticRxcount);
}
}
UpdateData(FALSE); //更新编辑框内容
}
请大家帮忙看一下!谢谢啦!
m_ctrMscomm.put_Output(COleVariant(m_strEditTxData));//发送数据
下面是消息处理函数
void CSerialPortDlg::OnCommMscomm() //串口事件的消息处理函数
{
// TODO: Add your message handler code here
//m_ctrMscomm.put_RThreshold(1);
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
wchar_t rxdata[2048]; //设置BYTE数组
CString strtemp;
if(2==m_ctrMscomm.get_CommEvent()) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrMscomm.get_Input();//读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format(L"%c",bt); //将字符送入临时变量strtemp存放
m_strEditRxData+=strtemp; //加入接收编辑框对应字符串
rxcount=strtemp.GetLength()+rxcount;
m_strStaticRxcount.Format(L"%ld", rxcount);
GetDlgItem(IDC_STATIC_RXCOUNT)->SetWindowText(m_strStaticRxcount);
}
}
UpdateData(FALSE); //更新编辑框内容
}
请大家帮忙看一下!谢谢啦!