读书人

串口接收的十六进制字符串转换为十进制

发布时间: 2013-01-26 13:47:04 作者: rapoo

串口接收的十六进制字符串转换为十进制数字显示
如接收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]代表第二个数,以此类推就是

读书人网 >C++ Builder

热点推荐