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

串口接收的十六进制字符串转换为十进制数字显示解决思路

2013-01-26 
串口接收的十六进制字符串转换为十进制数字显示如接收EB CC A0 FF ...显示为235 204 160 255 ...对C++ Bui

串口接收的十六进制字符串转换为十进制数字显示
如接收EB CC A0 FF ...
显示为235 204 160 255 ...
对C++ Builder 6 完全不懂。希望大侠能给个代码。感谢!

void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
   char   szBuf[500]={0};
    int   i,   j;
    OleVariant   RxBuff; 
    switch   (MSComm1-> CommEvent)
    {
        case   comEvReceive:
            if   (MSComm1-> InBufferCount   >   0)   {
                RxBuff=   MSComm1-> Input;
                j=   RxBuff.ArrayHighBound(1);
                for   (i=0;   i <=j;   i++)
                    szBuf[i]=   RxBuff.GetElement(i);
                szBuf[i]=   NULL;
                //ifdef   _DEBUG
                Memo1->Text= Memo1->Text+AnsiString(szBuf);//显示在这里
                //RichEdit1-> Lines-> Add(AnsiString(szBuf));
                //#endif

            }

            break; 
    } 

}

[解决办法]
Memo1->Text= Memo1->Text + " " + IntToStr(StrToInt(String("0x") + szBuf));

[解决办法]
引用:
谢谢,刚测试了下,发送一个数据,显示OK,如果我一次性接收到一串“EB CC A0 FF ...”数据怎么处理,查了下,好像不能用SPLIT函数,怎么按空格分开后再转换后显示呢?


TStringList *lst = new TStringList;

lst->Delimiter = ' ';
lst->DelimitedText = szBuf;

for (int i = 0; i < lst->Count; i++)
{
    Memo1->Lines->Text = Memo1->Lines->Text
            + " " + IntToStr(StrToInt(String("0x") + lst->Strings[i]));
}

delete lst;

[解决办法]
szBuf[0]代表第一个,sBuf[1]代表第二个数,以此类推就是

热点排行