怎么将4字节16进制转化成浮点数
VC和VB里是怎么处理的比如我有个16进制数0xC2C7FAE1,怎么转化为浮点数,要提供程序例子,VB和VC的都可以,提供一样给100分,谢谢...
VC 和VB 里是怎么处理的 比如我有个16进制数0xC2C7FAE1,怎么转化为浮点数,要提供程序例子,VB和VC的都可以,提供一样给100分,谢谢
展开
7个回答
展开全部
四个字节的十六机制数组转浮点数:
byte[bytes=newbyte[4];
BitConverter.ToSingle(bytes,0)。
四字节16进制数可转换为四个二进制字节(Bytes),从而使用Api函数来处理成单精度浮点数。以下用VB代码处理。
VB有专门的API函数CopyMemory能处理2-10进制浮点数转换和10-2进制浮点数转换。
扩展资料
例:
char p[4] = {0x1e,0x0d,0xa8,0x3c}; 转换成浮点数:0.0205140,还有如何判断,这四个十六进制转换成浮点数是正数还是负数。
#include <stdio.h>
int main(void)
{float a=0.0f;unsigned char * b
= (unsigned char*)&a;
char c[4] = {0x1e,0x0d,0xa8,0x3c};
int i = 0;//printf("b1:%d\n",b);
for(i = 0; i<4; i++){ b[i]
= (unsigned char)c[i]; }
//printf("b2:%d\n",*b);
printf("结果为:\n");printf("%f\n", a);
//printf("a:%d\n",a)推荐于2017-10-09 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:25897
获赞数:1464972
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
展开全部
四字节16进制数可转换为四个二进制字节(Bytes),从而使用Api函数来处理成单精度浮点数。
以下用VB代码处理。
VB有专门的API函数CopyMemory能处理2-10进制浮点数转换和10-2进制浮点数转换。
下列代码演示了10进制Single(单精度浮点型转为16进制字符显示的浮点数和其相反运算:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub BinToSin_Click()
Dim sinStr As String
Dim sinSj As Single
Dim Buffer(3) As Byte
Dim i As Integer
sinStr = Text2
For i = 1 To Len(Text2) Step 2
Buffer((7 - i) / 2) = Val("&H" & Mid(sinStr, i, 2))
Next
CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4
Text3 = sinSj
End Sub
Private Sub SinToBin_Click()
Dim i As Integer
Dim hexData As String
Dim a As Single
Dim Buffer(3) As Byte
a = Val(Text1)
CopyMemory Buffer(0), a, 4
For i = 0 To 3
If Len(Hex(Buffer(i))) = 1 Then
hexData = "0" & Hex(Buffer(i)) + hexData
Else
hexData = Hex(Buffer(i)) + hexData
End If
Next
Text2 = hexData
End Sub
需要注意的事项是这四字节的高低字节排序,不能搞错。
VB的Single 数据类型:
Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。
在内存以32位二进制形式存在:
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
第1位为符号位;
第2-9位为阶码位;
第10-32位为2进制小数尾值;
即F2 ^ n * 1. XXXXXXX XXXXXXXX XXXXXXXX;
其中,F为正号或负号(首为为0正数,首位为1负数;
n为2-9位组成的BYTE数据值;
XXXXXXX XXXXXXXX XXXXXXXX为尾数。
参考:http://blog.csdn.net/zdingyun/article/details/2528026
以下用VB代码处理。
VB有专门的API函数CopyMemory能处理2-10进制浮点数转换和10-2进制浮点数转换。
下列代码演示了10进制Single(单精度浮点型转为16进制字符显示的浮点数和其相反运算:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub BinToSin_Click()
Dim sinStr As String
Dim sinSj As Single
Dim Buffer(3) As Byte
Dim i As Integer
sinStr = Text2
For i = 1 To Len(Text2) Step 2
Buffer((7 - i) / 2) = Val("&H" & Mid(sinStr, i, 2))
Next
CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4
Text3 = sinSj
End Sub
Private Sub SinToBin_Click()
Dim i As Integer
Dim hexData As String
Dim a As Single
Dim Buffer(3) As Byte
a = Val(Text1)
CopyMemory Buffer(0), a, 4
For i = 0 To 3
If Len(Hex(Buffer(i))) = 1 Then
hexData = "0" & Hex(Buffer(i)) + hexData
Else
hexData = Hex(Buffer(i)) + hexData
End If
Next
Text2 = hexData
End Sub
需要注意的事项是这四字节的高低字节排序,不能搞错。
VB的Single 数据类型:
Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。
在内存以32位二进制形式存在:
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
第1位为符号位;
第2-9位为阶码位;
第10-32位为2进制小数尾值;
即F2 ^ n * 1. XXXXXXX XXXXXXXX XXXXXXXX;
其中,F为正号或负号(首为为0正数,首位为1负数;
n为2-9位组成的BYTE数据值;
XXXXXXX XXXXXXXX XXXXXXXX为尾数。
参考:http://blog.csdn.net/zdingyun/article/details/2528026
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上面提供的方法((float)i;)都存在一个问题,即只是把整数强制转换为浮点数罢了,并不能解决楼主关心的问题。
有个简单的办法:
DWORD dwValue = 0xC2C7FAE1;
float fValue;
memcpy(&fValue, &dwValue, sizeof(DWORD));
printf("%f\n", fValue);
有个简单的办法:
DWORD dwValue = 0xC2C7FAE1;
float fValue;
memcpy(&fValue, &dwValue, sizeof(DWORD));
printf("%f\n", fValue);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int main()
{
int i = 0xC2C7FAE1;
float f = (float)i;// 就这样转换就行了。
return 0;
}
估计你的问题没说清楚,应该没那么简单的。
有问题再问,QQ:183323023
{
int i = 0xC2C7FAE1;
float f = (float)i;// 就这样转换就行了。
return 0;
}
估计你的问题没说清楚,应该没那么简单的。
有问题再问,QQ:183323023
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int i = 0xC2C7FAE1;
float f = (float)i
float f = (float)i
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询