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

歡迎光臨散文網(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ó)家法律
辽宁省| 紫金县| 三门峡市| 辽宁省| 铁力市| 怀化市| 勃利县| 高邑县| 武山县| 祁东县| 济南市| 缙云县| 屏山县| 东台市| 启东市| 渝中区| 绥宁县| 纳雍县| 临安市| 阳曲县| 鄱阳县| 老河口市| 冀州市| 眉山市| 盐池县| 泰和县| 麻江县| 苏尼特左旗| 保定市| 靖江市| 太原市| 中西区| 民和| 孟连| 鞍山市| 永仁县| 西乡县| 六盘水市| 丹棱县| 福鼎市| 龙游县|