最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
庆元县| 惠来县| 怀柔区| 当阳市| 安化县| 齐河县| 邵武市| 潞西市| 江达县| 梁平县| 滕州市| 牙克石市| 昌江| 噶尔县| 义马市| 海伦市| 东丽区| 仲巴县| 临清市| 维西| 舞阳县| 禄丰县| 邵阳市| 东台市| 北辰区| 偏关县| 康定县| 四子王旗| 平湖市| 聂拉木县| 嘉义县| 郧西县| 斗六市| 武城县| 微山县| 永昌县| 抚顺市| 仁化县| 波密县| 色达县| 湟源县|