Caché怎么用8个十六进制字符得到32位浮点数

IEEE 754浮点数表示标准
详情查看标准文档
处理步骤
1.首先把16进制字符转换为二进制的字符。8个十六进制字符得到32个二进制字符
2.然后按32位浮点数表示把二进制数据处理成十进制浮点数
3.左边第一个二进制是正负位,0正数,1负数
4.然后紧接着的八位是阶码、最后二十三位是尾数
5.假设阶码的二进制串是E,尾数的是M。转换的十进制的阶码是E10,十进制的位数是M10,正负位按最高位为1或-1,变量约定S10
6.计算公式为(S10*(1+(M10*(2^(-23)))))*(2 ^(E10-127))

Caché实现事列

// w ##Class(OTH.TEST).M16StrToFloat("40A00000")

// w ##Class(OTH.TEST).M16StrToFloat("40A0E003")

// w ##Class(OTH.TEST).M16StrToFloat("30A0E003")

ClassMethod M16StrToFloat(str)
{
	s Ret=""
	i $l(str)'=8 q "不是32位浮点数的16进制"
	//32位浮点数
	i $l(str)=8 d
	.s AllBit=""
	.f i=1:1:8 d
	..s OneChar=$e(str,i,i)
	..s OneBit=""
	..i OneChar="0" s OneBit="0000"
	..i OneChar="1" s OneBit="0001"
	..i OneChar="2" s OneBit="0010"
	..i OneChar="3" s OneBit="0011"
	..i OneChar="4" s OneBit="0100"
	..i OneChar="5" s OneBit="0101"
	..i OneChar="6" s OneBit="0110"
	..i OneChar="7" s OneBit="0111"
	..i OneChar="8" s OneBit="1000"
	..i OneChar="9" s OneBit="1001"
	..i OneChar="A" s OneBit="1010"
	..i OneChar="B" s OneBit="1011"
	..i OneChar="C" s OneBit="1100"
	..i OneChar="D" s OneBit="1101"
	..i OneChar="E" s OneBit="1110"
	..i OneChar="F" s OneBit="1111"
	..s AllBit=AllBit_OneBit
	.//正负位,0正数,1负数
	.s S=$e(AllBit,1,1)
	.s S10=1
	.i S="1" s S10=-1
	
	.//阶码
	.s E=$e(AllBit,2,9)
	.//尾数
	.s M=$e(AllBit,10,32)
	
	.//10进制的阶码值
	.s E10=0
	.s ENum=1
	.f i=8:-1:1 d
	..s CurChar=$e(E,i,i)*ENum
	..s E10=E10+CurChar
	..s ENum=ENum*2
	
	.//10进制的尾数值
	.s M10=0
	.s MNum=1
	.f i=23:-1:1 d
	..s CurChar=$e(M,i,i)*MNum
	..s M10=M10+CurChar
	..s MNum=MNum*2
	.s Ret=(S10*(1+(M10*(2**(-23)))))*(2**(E10-127))
	
	q Ret
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乌鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值