2个字节能存多少个16进制_LabVIEW高级编程技巧:如何从内存字节流中恢复原始数据...
問題提出
大家在用LabVIEW寫工控上位機軟件時,可能會經常會遇到這樣的問題,即當我們底層硬件模塊已經調試完畢時,需要將硬件模塊數據通過網口、串口或其它總線方式傳輸到上位機軟件中,而上位機軟件通過不同的通信協議接收到這些數據時,通常都是以字節流的形式存儲到計算機的內存中(通常以某個變量暫時存儲)。這些字節流中的數據可能以不同的方式代表實際的數據,比如,底層硬件可能發送的是ASCII碼數據,一個字節代表一個字符數據,也有可能是單精度的浮點型數據,每4個字節代表一個數據點,甚至也有可能是更復雜的其它如結構體類型的數據等等。
那么我們如何將這些字節流數據正確恢復為底層硬件實際發送的數據呢?
這時候,LabVIEW中一個關鍵的“強制類型轉換”函數就派上用場了。
“強制類型轉換”函數說明
這個函數比較簡單,它的輸入輸出參數及接口意義如下所示:
使用這個函數,可將任意類型的數據x轉換為你想要類型對應的數據。從它的C語言語法表示的輸出參數“*(類型*)&x”中,可以明顯的看出,它實際上是先取出x的地址,然后將這個地址強制轉換為指向你要轉換的數據類型,最后再取出新類型對應的實際數據。
理解了這個函數的參數及意義后,下面通過兩個小例子看看怎么用它恢復內存字節流中的數據吧。
由單字節表示的ASCII碼字節流的恢復例子
比如,底層硬件發送一個字符串“abcdefgh”,那么使用網口調試助手可以看到,你接收到的數據字節流以16進制表示應該是61、62、63、64、65、66、67、68。
那么,使用強制轉換函數將其恢復為字符串時,在類型參數上只需要連接一個字符串常量即可,其程序框圖代碼如下圖所示,:
運行結果如下圖所示,已經正確的將內存中的字節流數據轉換為了字符串“abcdefgh”。
由四字節表示的單精度浮點型字節流的恢復例子
上個例子比較簡單,如果底層硬件發送的是連續的由4個字節表示的單精度浮點型數據流,如連續的6個數值分別為1.1、2.2、3.3、4.4、-1.5、-2.5、那么使用強制轉換函數將這個字節流數據恢復為其本身數值的程序框圖代碼如下圖所示:
與上例不同的是,這兒的類型要給一個單精度類型的一維數組常數即可,運行結果如下圖所示,可以看出,這個程序已經正確的將內存中的字節流數據轉換為了單精度的一維數組的值。
總結
從上面兩個小例子中可以看出,LabVIEW提供的”強制類型轉換“函數是一個功能非常強大的函數,熟練使用這個函數,可以將內存中任意的字節流數據轉換為或者說映射為你想要的數據類型,從而避免了人為去寫代碼恢復實際的數據內容的過程。
本文由編碼那些事原創,請關注+轉發+收藏+點贊,帶你一起長知識!
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的2个字节能存多少个16进制_LabVIEW高级编程技巧:如何从内存字节流中恢复原始数据...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 影子卫士和影子系统哪个好用_门店管理营销
- 下一篇: c++图的创建_使用 Amazon Ne