五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【UE4】UnLua怎么讀取二進(jìn)制數(shù)據(jù)中的float?

2021-01-27 17:20 作者:天空游蕩的魚  | 我要投稿


????最近正好在做Lua的網(wǎng)絡(luò)消息處理,希望將C++沒(méi)有處理到的消息轉(zhuǎn)給Lua處理。

剛好遇到一個(gè)問(wèn)題, Lua解析buff,怎么處理浮點(diǎn)數(shù)?我們都知道如果是int,直接讀取每個(gè)字節(jié)按‘字節(jié)序’放在高低位就可以了。但float怎么辦呢?

????為了處理這個(gè)問(wèn)題,今天就來(lái)講講浮點(diǎn)數(shù)的存儲(chǔ)方式或者叫做計(jì)算方式。

整型數(shù)據(jù)比較簡(jiǎn)單,除去符號(hào)位,2<<n + 2<<n-1 + ...(這里<<指2的N次方,不會(huì)打上角標(biāo))

float是32位占四個(gè)字節(jié)

0100001 10001101 00000000 00000000

總共分為三段

0 ????1000011 ????00011010000000000000000


要搞懂這樣表示的意思,首先得知道,浮點(diǎn)數(shù)是用科學(xué)計(jì)數(shù)法標(biāo)記的,即:

123.375需要表示成1.23375 e-2


第一段1位為符號(hào)位:0表示正,1表示負(fù)

第二段8位為小數(shù)點(diǎn)位置:即上面的e-2,這里需要注意,計(jì)算出來(lái)的值為了表示正負(fù),會(huì)+127, 如果要還原成小數(shù)位需要-127

第三段23位(其實(shí)是24位):表示前面的具體數(shù)據(jù)


接下來(lái)我們看看例子:

(二進(jìn)制轉(zhuǎn)十進(jìn)制)

0 1000011 00011010000000000000000

0代表正數(shù)

10000110代表e,按二進(jìn)制計(jì)算方式e = 128 + 2 + 1 - 127 = 4

還剩余23位為實(shí)數(shù),前面講了其實(shí)是24位,最前面以為總是為1

所以,剩余的二進(jìn)制就是100011010000000000000000(補(bǔ)齊24位),小數(shù)點(diǎn)的位置在第4位(e)

10001.1010000000000000000現(xiàn)在計(jì)算整數(shù)部分的值2<<4 + 1=17,小數(shù)部分的值(1/2) + (1/2)三次方=0.5 + 0.125=0.625

所以0100001 10001101 00000000 00000000表示為float,它的值就是十進(jìn)制的17.625


(十進(jìn)制轉(zhuǎn)二進(jìn)制)

比如的123.375

先將123轉(zhuǎn)為二進(jìn)制01111011,.375轉(zhuǎn)二進(jìn)制0.011

所以24位的二進(jìn)制為:01111011.011,小數(shù)點(diǎn)在第6位即e=6 + 127 = 128 + 4 + 2 + 1 = 10000111

0 10000111 1110110 11000000 00000000

你會(huì)了嗎?



????浮點(diǎn)數(shù)知道怎么計(jì)算了,那Lua有辦法處理嗎?或者說(shuō)有沒(méi)有簡(jiǎn)單的辦法處理?

????我反正是放棄了,最后讓C++提供函數(shù)轉(zhuǎn)吧(雖然消耗會(huì)大些)。

????如果你有好的辦法,希望賜教,加群交流。

????群號(hào):1047387740驗(yàn)證密碼關(guān)注后會(huì)收到


【UE4】UnLua怎么讀取二進(jìn)制數(shù)據(jù)中的float?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
嘉兴市| 潞西市| 昂仁县| 海宁市| 苗栗市| 县级市| 德惠市| 沽源县| 图片| 论坛| 呼图壁县| 六安市| 石嘴山市| 独山县| 台东市| 北京市| 阳东县| 周至县| 永昌县| 壶关县| 务川| 凤山市| 临洮县| 迁西县| 延长县| 嵊州市| 通化县| 蓬安县| 大悟县| 吉安市| 渝北区| SHOW| 平果县| 合肥市| 象州县| 吉林省| 沙洋县| 房产| 和顺县| 无为县| 靖西县|