首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-03-18 
高手们朝这里看啊!!!BCB数据转换出问题了望帮帮忙!!!!串口发过来的数据(应该是字符串吧)无法转换为16进制(

高手们朝这里看啊!!!BCB数据转换出问题了望帮帮忙!!!!
串口发过来的数据(应该是字符串吧)无法转换为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);  
   
  }  
   
  }  
  }  
  }  


[解决办法]
那个帖子就是楼主的旧帖子。
[解决办法]
“ 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

[解决办法]
调用我下面写的 把你得到的ASCII字符串转换一下即可

C/C++ code
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"));}
[解决办法]
楼主到底想要显示什么格式?比如一个字符串:"1234",接收方是想显示"1234",还是想显示"31 32 33 34"?先说清楚。

热点排行