vc中float與DWORD的互想轉(zhuǎn)換實(shí)現(xiàn)代碼
引子:在看《龍書(shū)》的時(shí)候有個(gè)float到DWORD的轉(zhuǎn)換函數(shù)不理解。
DWORD d3d::FtoDw(float f) { return *((DWORD*)&f); }
背景: 有些函數(shù)需要傳入DWORD類(lèi)型的變量,但是該變量的實(shí)際意義是用小數(shù)來(lái)表示的。這里就需要在不改變float本身值的情況下傳入一個(gè)DWORD變量。
一段網(wǎng)上的代碼
DWORD dw = 0; float f1 = 0.25; cout<<"f1 = "<<f1<<endl; dw = *((DWORD*)&f1); cout<<"dw = *((DWORD*)&f1): "<<dw<<endl; f1 = 0.0; cout<<"f1 = 0.0: "<<f1<<endl; f1 = *((float*)&dw); cout<<"f1 = *((float*)&dw): "<<f1<<endl;
運(yùn)行結(jié)果是
f1 = 0.25 dw = *((DWORD*)&f1): 1048576000 f1 = 0.0: 0 f1 = *((float*)&dw): 0.25
這里利用的是編譯器轉(zhuǎn)型的手段,對(duì)于任何字節(jié)對(duì)等的類(lèi)型都適用,比如float到int,double到long等等。這樣的轉(zhuǎn)換可以保證二進(jìn)制數(shù)據(jù)不丟失,從而保證數(shù)據(jù)的完整性。
顏色轉(zhuǎn)換,float <->DWORD
在DirectX程序中有些地方用DWORD(RGBA)格式表示顏色,其范圍是[0 - 255],在shader中則都以float來(lái)表示顏色,其范圍是[0.0 - 1.0],兩者間的轉(zhuǎn)換規(guī)則如下:
DWORD -> float 將DWORD除以255
float -> DWORD 將float值乘以255
舉個(gè)例子,127 / 255 = 0.5,0.1 * 255 = 25
相關(guān)文章
C++數(shù)據(jù)結(jié)構(gòu)紅黑樹(shù)全面分析
今天的這一篇博客,我要跟大家介紹二叉搜索樹(shù)中的另一顆樹(shù)——紅黑樹(shù),它主要是通過(guò)控制顏色來(lái)控制自身的平衡,但它的平衡沒(méi)有AVL樹(shù)的平衡那么嚴(yán)格2022-02-02C++求所有頂點(diǎn)之間的最短路徑(用Dijkstra算法)
這篇文章主要為大家詳細(xì)介紹了C++用Dijkstra算法求所有頂點(diǎn)之間的最短路徑,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04安裝OpenMPI來(lái)配合C語(yǔ)言程序進(jìn)行并行計(jì)算
這篇文章主要介紹了安裝OpenMPI來(lái)配合C語(yǔ)言程序進(jìn)行并行計(jì)算的例子,MPI的全稱(chēng)是Message Passing Interface即標(biāo)準(zhǔn)消息傳遞界面,可以用于并行計(jì)算,需要的朋友可以參考下2015-11-11C語(yǔ)言采用文本方式和二進(jìn)制方式打開(kāi)文件的區(qū)別分析
這篇文章主要介紹了C語(yǔ)言采用文本方式和二進(jìn)制方式打開(kāi)文件的區(qū)別分析,有助于讀者更好的理解文本文件與二進(jìn)制文件的原理,需要的朋友可以參考下2014-07-07