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