我正在編寫一個程序,使用無連接(UDP)套接字與某個患者監視器進行通信。我需要一個建議,用於解析從患者監護儀接收到的數據的最快和最有效的算法。用C編寫套接字並反序列化響應
病人監視器發送數據作爲的AttributeList結構,該結構的定義是以下: -
typedef struct {
uint16 count;
uint16 length;
AVAType * values;
} AttributeList;
typdef struct {
uint16 id;
uint16 length;
void * data;
} AVAType
因此,一個AttributeList中包含許多AVAType結構,並且每AVAType結構包含ID和作爲void指針數據(數據是隻是AVAType中實際數據的佔位符)。實際上,爲AVAType和每個ID定義了大約150個ID,爲了解析目的,數據必須放置在相應的數據結構中。
因此,如果在ID結構AVAType爲1,則數據必須使用算法的一個解析,但如果ID是2,那麼數據必須使用算法B等進行解析...
我的當前方法是使用150 if-else語句並加載AVAType的特定數據結構,然後解析結果。患者監護儀也按網絡順序發送數據,我需要根據ID解包AVAType。
請提出一些處理這種情況的好方法。這僅僅是一件大學的事情,我對安全性並沒有太多的關注,我認爲安全性可以逐漸提高,但現在我的速度正在加快。
是的,它是actaully AVAType values [] ;.你能更具體地說明爲什麼這與AVAType *有所不同?如果我用其他方式定義我的結構,它可以有用嗎?
也許你可以創建一個hashmap,其中key是ID,value是一個函數指針。這樣你不需要if-else結構,但可以從哈希表中獲取算法的函數。編輯:如gbulmer所說,函數指針數組更合理。 – Timo 2012-03-25 20:54:06
在處理患者監護儀時,您是否應該將注意力放在可靠性和安全性上而不是速度上? – 2012-03-25 21:00:30
除非您正在使用內存有限的嵌入式系統,否則我建議使用數組。調試很簡單,非常可預測。該ID只有16位,這是相當小的存儲量。它在運行時非常可預測,它是'fun_ptr [id](...)'。因爲它非常簡單,它也應該直接添加功能來自動測試它們,並看到數據和調用匹配。 – gbulmer 2012-03-25 21:01:50