VC 中串口通信编程中 怎样把CString类对象str中保存的数据以十六进制的形式通过串口发送出去

说明:是CMScomm写的。CString类对象str中保存的数据已经是十六进制的数据了:例如:str(“0A0A0C0C0F”);就是把这个CString类对象str中... 说明:是CMScomm写的。
CString类对象str中保存的数据已经是十六进制的数据了:
例如:str(“0A0A0C0C0F”);
就是把这个CString类对象str中保存的十六进制数据通过串口发送给下位机。
展开
 我来答
航航_07
2011-05-17 · 超过16用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:0
展开全部
void CCommWizardDlg::OnOnCommCommctrl()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(bReceive)
{
if(m_Com.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp = m_Com.GetInput(); //读缓冲区
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); //字符型

if(m_nInputMode == 2)
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放

m_strReceive = m_strReceive + strtemp; //加入接收编辑框对应字符串
}
m_strReceive += "\r\n";
}
}
UpdateData(FALSE); //更新编辑框内容
}
这是我的程序里的那段,应该有所帮助吧
追问
不是接收哦,是怎么实现发送?
追答
void CCommWizardDlg::OnManualsend() 
{
// TODO: Add your control notification handler code here
CString strSend;

if(m_nInputMode > 1)
{
CByteArray hexdata;
int len=String2Hex(m_strSendString ,hexdata);//楼主主要值这个函数
m_Com.SetOutput(COleVariant(hexdata));
}
else
m_Com.SetOutput(COleVariant(m_strSendString));//发送数据
}

int CCommWizardDlg::String2Hex(CString str, CByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();

senddata.SetSize(len/2);

for(int i=0;i=len)
break;
lstr=str[i];
hexdata=ConvertHexChar(hstr);
lowhexdata=ConvertHexChar(lstr);
if((hexdata==16)||(lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
senddata[hexdatalen]=(char)hexdata;
hexdatalen++;
}

senddata.SetSize(hexdatalen);
return hexdatalen;
}

//这是一个将字符转换为相应的十六进制值的函数
//功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1
char CCommWizardDlg::ConvertHexChar(char ch)
{
if((ch>='0')&&(ch='A')&&(ch='a')&&(ch<='f'))
return ch-'a'+10;
else return (-1);
}
za...7@21cn.com
2011-05-18 · TA获得超过1110个赞
知道小有建树答主
回答量:1106
采纳率:100%
帮助的人:478万
展开全部
CString strHexNum(_T("0x01a0"));
int nNum = _tcstol(strHexNum, NULL, 16);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-05-24
展开全部
QQ:59369826
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式