串口二进制数据的提取
用微软的MSComm控件读取串口的二进制数据,
例如:串口接收到的数据是0x68 0x01 0x68 0x02 0x33 0x21 0x11 0x13
接收到以后,把他们放在一个int arr[8]数组中,使
arr[0]=0x68
arr[1]=0x01
arr[2]=0x68
arr[3]=0x02
arr[4]=0x33
arr[5]=0x21
arr[6]=0x11
arr[7]=0x13
应该如何编写代码?
希望大虾帮忙啊!!
问题点数:100、回复次数:5Top
1 楼lly_oldf(溢出)回复于 2005-04-17 20:28:33 得分 0
!!!!!!!!!救命啊~~~Top
2 楼genliter(许涵)回复于 2005-04-17 20:35:50 得分 30
这样
char arr[8];
mscomm->read(arr,..这里的参数记不清了);
然后就读到arr里了.
arr的每个元素就是你收到的每个值,当然此时直接显示,显示的十进制的,你可以用
IntToHex转化成16进制显示.
Top
3 楼clong320(clong320)回复于 2005-04-18 11:11:25 得分 50
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
AnsiString s;
int rev_len;
OleVariant RxBuff;
char buffer[256];
RxBuff = VarArrayCreate(OPENARRAY(int,(0,256)),varByte);
MSComm1->RThreshold = 0;
switch(MSComm1->CommEvent)
{
case comEvReceive:
RxBuff = MSComm1->Input;
int j= RxBuff.ArrayHighBound(1);
for (int i = 0; i <= j; i++) buffer[i]= RxBuff.GetElement(i);
rev_len = RxBuff.ArrayHighBound(1);
for(int i = 0; i < rev_len; i++) Buffer[i] = RxBuff.GetElement(i);
for(int i = 0; i < rev_len; i++) s += IntToHex(Buffer[i],2) + " ";
s = s.Trim();
if(!s.IsEmpty()) Memo1->Lines->Add(s);
break;
}
MSComm1->RThreshold = 1;
}
Top
4 楼happyct(绿叶对大树的情怀)回复于 2005-04-18 11:24:25 得分 20
clong320的方法应该可用Top
5 楼lly_oldf(溢出)回复于 2005-04-18 11:37:08 得分 0
收到!虽然我自己已经解决了这个问题,但是还要谢谢各位!!!Top




