vc中float与DWORD的互想转换实现代码
引子:在看《龙书》的时候有个float到DWORD的转换函数不理解。
DWORD d3d::FtoDw(float f) { return *((DWORD*)&f); }
背景: 有些函数需要传入DWORD类型的变量,但是该变量的实际意义是用小数来表示的。这里就需要在不改变float本身值的情况下传入一个DWORD变量。
一段网上的代码
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;
运行结果是
f1 = 0.25 dw = *((DWORD*)&f1): 1048576000 f1 = 0.0: 0 f1 = *((float*)&dw): 0.25
这里利用的是编译器转型的手段,对于任何字节对等的类型都适用,比如float到int,double到long等等。这样的转换可以保证二进制数据不丢失,从而保证数据的完整性。
颜色转换,float <->DWORD
在DirectX程序中有些地方用DWORD(RGBA)格式表示颜色,其范围是[0 - 255],在shader中则都以float来表示颜色,其范围是[0.0 - 1.0],两者间的转换规则如下:
DWORD -> float 将DWORD除以255
float -> DWORD 将float值乘以255
举个例子,127 / 255 = 0.5,0.1 * 255 = 25
相关文章
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了C#中float的取值范围和精度,较为详细的分析了float的取值范围与表示方法及精度等概念,有助于深入了解C#数据类型,需要的朋友可以参考下...2020-06-25
MySQL中Decimal类型和Float Double的区别(详解)
下面小编就为大家带来一篇MySQL中Decimal类型和Float Double的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03Go语言string,int,int64 ,float之间类型转换方法
Go语言中int类型和string类型都是属于基本数据类型,两种类型的转化都非常简单。下面通过本文给大家分享Go语言string,int,int64 ,float之间类型转换方法,感兴趣的朋友一起看看吧...2020-05-01java中用float时,数字后面加f,这样是为什么你知道吗
这篇文章主要介绍了java用float时,数字后面加f,这样是为什么你知道吗?具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-04- 这篇文章主要介绍了golang int 转float 强转和高精度转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-21
详细分析sqlserver中的小数类型(float和decimal)
这篇文章主要介绍了sqlserver中的小数类型的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-12-08- 这篇文章主要介绍了vc中float与DWORD的互想转换实现代码,需要的朋友可以参考下...2020-04-25
- 从Excel中导入到sql2000,有一列“联系方式”变成了float类型,我想转换成nvarchar类型,用下面的语句 select convert(nvarchar(30),convert(int,联系方式)) from employee...2017-10-10
C#中32位浮点数Float(Real)一步步按位Bit进行分析
这篇文章主要介绍了C#中32位浮点数Float(Real)一步步按位Bit进行分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-08-12Qt 自定义属性Q_PROPERTY不显示float类型的解决
这篇文章主要介绍了Qt 自定义属性Q_PROPERTY不显示float类型的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-11-11C++ float转std::string 小数位数控制问题
这篇文章主要介绍了C++float转std::string小数位数控制问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-11-09