收到許多組資料,每組資料都是八個16進制的數在一起,比如其中某組是 99 66 1A 10 22 33 21 00 這樣的資料。我現在需要提取出每組資料的排在第四、五、六 的三個數,并將這三個數加成一個新的十進制的數并輸出,應該怎么整。
uj5u.com熱心網友回復:
理解透傳輸協議,先確保接收到的資料能正確分組然后定義一個結構體,
typedef struct _tagGpData_t
{
uchar uByte[8];
}GPDATA;
剩下的差不多就類似與
GPDATA *pGp = (GPDATA*)pRecv; //指向資料組緩沖區
int newData = (pGp->uByte[4]<<16) + (pGp->uByte[5]<<8) + (pGp->uByte[6]);
uj5u.com熱心網友回復:
沒有太明白是怎么回事,我要做一個串口實時讀取資料并繪圖的軟體,需要中間的那幾組資料uj5u.com熱心網友回復:
不太懂誒,能講詳細一下嗎
uj5u.com熱心網友回復:
那你先說說 你目前做到了哪一步?
uj5u.com熱心網友回復:
理解透傳輸協議,先確保接收到的資料能正確分組
然后定義一個結構體,
typedef struct _tagGpData_t
{
uchar uByte[8];
}GPDATA;
剩下的差不多就類似與
GPDATA *pGp = (GPDATA*)pRecv; //指向資料組緩沖區
int newData = (pGp->uByte[4]<<16) + (pGp->uByte[5]<<8) + (pGp->uByte[6]);
不太懂誒,能講詳細一下嗎
大神的意思是,在串口通信上,你應該有自己的應用層協議吧,比如另外一方是將資料按怎樣的格式發送給你的,這樣你自己就能知道想要的資料在哪個位置。
就算沒有應用協議,你從串口讀資料的時候,總會呼叫ReadFile()吧,該函式的引數中不是需要你自己指定一個接受快取區嗎,而你接收到的資料都是8個一組這樣的形式,那么可以在快取區物件的地址位置上直接提取資料即可啊,如buffer[3+i*8]+buffer[4+i*8]+buffer[5+i*8]
uj5u.com熱心網友回復:
事實上很簡單,BYTE buf[]={99 66 1A 10 22 33 21 00};//將收到的數放到buf
int a;
char *pa=(char*) &a;// 將a的地址轉換為位元組指標
pa[1]=buf[4]; //你自己確定好接收位元組順序對應關系 a的順序是0位元組,是最低位,位元組3是最高位,如果你的編碼不是16進制形式,需要將buf[i]轉換為16進制形式
pa[2]=buf[5];
pa[3]=buf[6];
pa[4]=0;
//到此,a的值就是4~6位元組的值
uj5u.com熱心網友回復:
參考《編譯原理》中的詞法分析和有限狀態自動機。uj5u.com熱心網友回復:
臨時用一下的話,用串口助手接收,保存成txt,在Excel里面弄吧,還可以畫圖uj5u.com熱心網友回復:
char pszRev[1024] = { 0 };DWORD dwRead(0), dwSend(0);
while (1)
{
if (p->ReadData(pszRev, 1000, dwRead)) //接收資料
{
int Data3 = atoi(pszRev + 3);//取第三個資料
int Data4= atoi(pszRev + 4);//取第四個資料
int Data5 = atoi(pszRev + 5);//取第五個資料
//自己處理
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/73836.html
標籤:基礎類
上一篇:求助:新建ATL工程編譯出錯?
