串口程序发送接收16进制问题

九个太阳2023 2008-06-30 03:28:26
自己在CE下面写了个串口通讯程序,发送字符已经没有问题了,现在想添加支持16进制发送,在网上查了下,改了代码,可是接收的还是不正确,请教高手~~
接收16进制的时候,PC端用串口调试助手,发送A0,CE下面接收FFFFFFA0,但是发送00的时候就没有问题,我把关键的代码贴出来

void CALLBACK CSerialPortDlg::OnCommRecv(CWnd* pWnd, char *buf, int buflen)
{
CString tmp;

CSerialPortDlg * pDlg = (CSerialPortDlg*)pWnd;
CEdit *pRecvStrEdit = (CEdit*)pDlg->GetDlgItem(IDC_REC_DISP); /* 取得控件指针 */

if (pDlg->m_CtrlHex.GetCheck())
{
tmp.Format(_T("%02X "),*buf);
pDlg->m_strRecDisp += tmp;
}
else
{
for (int i = 0; i < buflen; i++, buf++)
{
tmp.Format(_T("%c"), *buf); /* 将字符转换为字符串 */
pDlg->m_strRecDisp += tmp;

}
}

pRecvStrEdit->SetWindowText(pDlg->m_strRecDisp); /* 显示在窗口上 */
DWORD temp = pDlg->m_strRecDisp.GetLength();
pRecvStrEdit->SetSel(temp);

pDlg->m_RecvChar += buflen;
tmp.Format(L"%ld",pDlg->m_RecvChar);
pDlg->GetDlgItem(IDC_DISPLAY_CHACTER)->SetWindowText(tmp);

}

...全文
402 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
九个太阳2023 2008-07-15
  • 打赏
  • 举报
回复
已经解决了
是数据类型的问题
谢谢各位兄弟~
shuiyan 2008-06-30
  • 打赏
  • 举报
回复
你试试0x64, 0x32, 0xbc,如果都是前面多了FFFFFFFF,那么就是buf的定义有问题。
原来是char*,应该改成unsigend char*
zhuyaqi2006 2008-06-30
  • 打赏
  • 举报
回复
或者将tmp.Format(_T("%02X "),*buf); 作一个转换也行
tmp.Format(_T("%02X "),(unsiged char)(*buf));
char 类型是有符号为的
unsigned char 是无符号为的.
char -> unsigned char
怎么转个转,你自己看怎么方便吧

zhuyaqi2006 2008-06-30
  • 打赏
  • 举报
回复
你的OnCommRecv(CWnd* pWnd, char *buf, int buflen)
为什么不用 OnCommRecv(CWnd* pWnd,unsiged char *buf, int buflen)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧