網(wǎng)站優(yōu)化報(bào)價(jià)單百度貼吧熱線客服24小時(shí)
今天在用一個(gè)采集模塊時(shí),發(fā)現(xiàn)讀出寄存器的數(shù)據(jù)是不同的,它有兩種范圍,一個(gè)時(shí)十六進(jìn)制整型,一種是有符號(hào)位十六進(jìn)制,對(duì)應(yīng)的量程和范圍也是不同的,針對(duì)之前讀取溫度沒(méi)有出現(xiàn)負(fù)數(shù)的情況,應(yīng)該是轉(zhuǎn)成了16位無(wú)符號(hào)類型。
接下來(lái)我們來(lái)轉(zhuǎn)換成16位有符號(hào)類型,這里也是把讀出的16進(jìn)制字符串格式轉(zhuǎn)換成普通字符串格式,然后用labview自帶的16進(jìn)制轉(zhuǎn)數(shù)值的函數(shù)來(lái)實(shí)現(xiàn)值得轉(zhuǎn)換。
當(dāng)?shù)玫?6進(jìn)制字符串時(shí),我們需要把16進(jìn)制轉(zhuǎn)換成二進(jìn)制進(jìn)行處理,但是labview字符串轉(zhuǎn)二進(jìn)制不太好轉(zhuǎn),這里用到了格式化寫入字符串,得到一串二進(jìn)制字符,然后判斷最高位是否存在來(lái)判斷得到的數(shù)是正數(shù)還是負(fù)數(shù),因?yàn)樽罡呶粸?時(shí)不顯示,這里就直接用字符串長(zhǎng)度判斷。
當(dāng)?shù)玫降瞄L(zhǎng)度為16時(shí),證明最高位是1,然后得到的數(shù)為負(fù)數(shù),接下來(lái)要對(duì)第1位到第15位二進(jìn)制字符進(jìn)行處理,由于不好進(jìn)行補(bǔ)碼操作,這里先把字符串轉(zhuǎn)換成字節(jié)數(shù)組,然后通過(guò)字節(jié)數(shù)組與1進(jìn)行異或操作得到二進(jìn)制數(shù)的反碼,然后再把字節(jié)數(shù)組轉(zhuǎn)換成字符串,通過(guò)掃描值和格式化寫入字符串把二進(jìn)制數(shù)轉(zhuǎn)換成16進(jìn)制數(shù),然后通過(guò)十六進(jìn)制值十進(jìn)制轉(zhuǎn)換函數(shù),轉(zhuǎn)成十進(jìn)制,由于補(bǔ)碼要原碼取反加一,加一的進(jìn)一操作不太好實(shí)現(xiàn),這里就直接在取反之后加一即可,然后乘上符號(hào)位就得到真值了。
整個(gè)函數(shù)如下。方便大家使用和學(xué)習(xí)。也歡迎大家有更好的方法可以分享交流在下方。