高手们朝这里看啊!!!BCB数据转换出问题了望帮帮忙!!!!

yuytt23 2010-05-07 11:21:45
串口发过来的数据(应该是字符串吧)无法转换为16进制(在Memo上显示出来的是ASCII码值)!我用的是MSComm里OnComm事件!具体程序如下:希望高手帮忙修改修改!
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
unsigned int len,k;
char a_cBuf[100];
OleVariant s; //声明一个用于接收数据的OleVariant变量。
AnsiString str; //声明一个AnsiString类型的变量
int val;

if(MSComm1->CommEvent==comEvReceive)
// 接收缓冲区中是否收到Rthreshold个字符。
{
if(MSComm1->InBufferCount)// 是否有字符驻留在接收缓冲区等待被取出
{

s=MSComm1->Input;//接收数据
str=s.AsType(varString);

strcpy(a_cBuf,str.c_str());

for(k=0;k<strlen(a_cBuf);k++)
{
Memo1->Text=Memo1->Text+" "+IntToHex(a_cBuf[k],2);

}

}
}
}
...全文
63 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2010-05-07
  • 打赏
  • 举报
回复
楼主到底想要显示什么格式?比如一个字符串:"1234",接收方是想显示"1234",还是想显示"31 32 33 34"?先说清楚。
周药师 2010-05-07
  • 打赏
  • 举报
回复
调用我下面写的 把你得到的ASCII字符串转换一下即可

AnsiString ASCIIToString(AnsiString ASCII_Str)
{
char h;
AnsiString shou ;
for(int i=0; i <ASCII_Str.Length();i=i+2)
{
AnsiString hex= ASCII_Str.SubString(i+1,2).UpperCase();
int a = StrToInt("$"+hex);
shou=(shou + char(a)).Trim() ;
}
return shou.Trim() ;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(ASCIIToString("31"));
}
周药师 2010-05-07
  • 打赏
  • 举报
回复
“ Memo1->Text=Memo1->Text+" "+IntToHex(a_cBuf[k],2); ”
看了一下
原来你串口发的数据本来就是ASCII码;
如:
a_cBuf[0] = 0x31 ;
a_cBuf[1] = 0x32 ;
a_cBuf[2] = 0x33 ;
你调用IntToHex(a_cBuf[k],2); 时当然显示的也是ASCII吗 31,32,33
ccrun.com 2010-05-07
  • 打赏
  • 举报
回复
那个帖子就是楼主的旧帖子。

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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