2016-11-30 51 views
1

我正在爲以離散數據包形式進行通信的串行設備編寫驅動程序。我還希望用戶能夠解釋來自串行流量轉儲文件的數據包。我打算在未來寫下其他類似的驅動程序。使用標準適當實現數據包流

通過查看可用的庫和標準後,我想實現std :: codecvt,它被iostream用來轉換爲寬字符,以提供一種方法來在字節流和數據包流之間進行轉換對象和處理asio,以便串行端口可以是標準的字節流。

對我來說,這似乎是最優雅的方法,這使得使用最多的標準,但我擔心它是codecvt的濫用。閱讀codecvt的文檔顯然只是爲了轉換字符編碼。但它似乎可以在更高級別的數據包對象中正常工作。

它誘使使用熟悉的插入和提取運算符來處理更高級別的數據,並且這種方法意味着需要最小的樣板代碼來實現這一目標。

這個想法是濫用codecvt嗎?您的經驗見解中,「正確」或「最佳」解決方案是什麼?

回答

0

我們將Asio和Boost.Spirit配對,將字節流轉換爲數據類型和數據類型,並轉換爲字節流。

我們經常使用它,所以我們已經將這個概念抽象成一個通用的packetizer庫,它可以採用Qi/Karma語法和可以與async_read_some一起使用的Asio類型。

我們將此與串行端口,TCP/IP套接字和自定義IO一起使用。