关于MSCOMM控件怎么显示结果为十六进制?

iq34126824 2011-06-01 01:48:56
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
AnsiString str; file://声明一个AnsiString类型的变量
OleVariant s;
if(MSComm1->CommEvent==comEvReceive)
// 接收缓冲区中是否收到Rthreshold个字符。
{
if(MSComm1->InBufferCount)// 是否有字符驻留在接收缓冲区等待被取出
{
s=MSComm1->Input;//接收数据
str=s.AsType(varString); //把接收到的OleVariant变量转换成AnsiString类型
Memo1->Text=Memo1->Text+str;//把接收到的数据显示在Memo1中。
}
}
}
这样的代码,最后的结果显示在Memo1中为16进制,,请问怎么操作
...全文
113 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
BCBPLC 2011-06-01
  • 打赏
  • 举报
回复
你的变体类型转成asString用错了。
BCBPLC 2011-06-01
  • 打赏
  • 举报
回复
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
// COM1:接收事件,格式与InputMode一致,
// 当无新来字符时,即使有未取字符,不会再次发生接收事件
// 接收的字符边界是乱的
String ss="接收<-: ";
OleVariant buf;
int bl;
while (buf=MSComm1->Input,
bl=buf.ArrayHighBound()+1,bl!=0) // 要反复取字符串,直至空
{
for (int i=0;i<bl;i++)
{
int c=(unsigned char)buf.GetElement(i);
ss=ss+IntToHex(c,2)+" ";
}
}
Memo1->Lines->Add(ss);
}
//---------------------------------------------------------------------------
我编的片段。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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