C语言中IEEE754格式的转换

我们经常遇到一个数据转换问题,我们使用电量表采集数据,电量表的电流电压等数据并不是两个字节,而是4个字节的表达,也就是下位系统直接传输的是单精度浮点数,存储格式是IEEE754格式,大家都比较陌生。实际上我们的计算机系统的浮点数也就是IEEE754格式,所以转换的时候非常简单,不需要进行各种复杂的算法,只需要进行必要的设置就可以转换成功,那就是使用C语言的union定义。(希望你能理解)。

//********************************************************
//  IEEE574格式转换
//********************************************************
typedef union                                        
{
   float   fdata;
   u32     idata;
}Convert754;


//********************************************************

delphi转换如下:

//**********************************
// IEE -754 转浮点数
//**********************************
function ByteToFloat(b1,b2,b3,b4:byte):Single;
var tdb : Single;
    bits : Integer;
    s,e,m :Integer;
begin
   bits := (b1 shl 24) + (b2 shl 16) + (b3 shl 8) +  b4;
   //处理符号
   if (bits shr 31
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在C语言计算IEEE 754浮点数表示的值,可以使用联合(union)来将浮点数的位模式与实际的浮点数值进行转换。以下是一个示例代码: ```c #include <stdio.h> typedef union { float f; // 浮点数值 struct { unsigned int mantissa : 23; unsigned int exponent : 8; unsigned int sign : 1; } parts; // 浮点数位模式的部分 } FloatUnion; int main() { FloatUnion u; // 设置浮点数位模式 u.parts.sign = 0; // 符号位(0为正,1为负) u.parts.exponent = 130; // 指数位 u.parts.mantissa = 0b10000000000000000000000; // 尾数位 // 访问浮点数值 printf("Float value: %f\n", u.f); return 0; } ``` 在这个示例,我们定义了一个 `FloatUnion` 联合体,其包含了一个 `float` 类型的成员变量 `f`,以及一个 `parts` 结构体成员,用于表示浮点数的位模式的各个部分。 使用联合体,我们可以通过修改 `parts` 结构体的成员来设置浮点数的位模式。在示例,我们设置了符号位为正(`0`),指数位为 `130`(二进制表示为 `10000010`),尾数位为 `0b10000000000000000000000`。 最后,通过访问联合体的 `f` 成员,我们可以获取到转换后的浮点数值,并使用 `printf()` 函数打印出来。 输出结果将是 `Float value: 10240.000000`,即将IEEE 754浮点数位模式 `0 10000010 10000000000000000000000` 转换为对应的浮点数 `10240.0`。 请注意,具体的位模式格式和字节顺序可能因系统而异,请根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zxm8513

你我共同努力,铸就技术丰碑。

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

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

打赏作者

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

抵扣说明:

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

余额充值