溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vc中float與DWORD的互想轉(zhuǎn)換實(shí)現(xiàn)代碼

發(fā)布時(shí)間:2020-09-27 16:59:10 來(lái)源:腳本之家 閱讀:276 作者:SwineX 欄目:編程語(yǔ)言

引子:在看《龍書(shū)》的時(shí)候有個(gè)float到DWORD的轉(zhuǎn)換函數(shù)不理解。

DWORD d3d::FtoDw(float f) 
 
{ 
 
  return *((DWORD*)&f); 
 
}

背景: 有些函數(shù)需要傳入DWORD類型的變量,但是該變量的實(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ì)等的類型都適用,比如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

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI