65.9K
CodeProject 正在变化。 阅读更多。
Home

在 IEEE、IBM 或 VAX 浮点数格式和字节表达式之间转换

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (6投票s)

2012 年 11 月 12 日

CPOL

1分钟阅读

viewsIcon

30830

downloadIcon

295

这是“在 IEEE、IBM 或 VAX 浮点数格式和字节表达式之间转换”的另一种表达方式

代码

下载 此处

引言

John Hou 的作品“在 IEEE、IBM 和 VAX 浮点数之间转换”最初是用 C++ 编写的。我采用了 John 的作品,并将其转换为 C# 4.0。这段代码有助于将 IBM 浮点数转换为 IEEE 浮点数,反之亦然。它还包括 VAX 浮点数到 IEEE 浮点数的转换。

这是 John Hou 精彩作品的 C# 版本。Tangible software 进行了最初的 C++ 到 C# 转换,然后我对其进行了清理、修复了缺失的部分,并将引擎封装起来,以便 .NET 开发者更容易使用。

背景

John Hou 的作品在这里有文档说明。

https://codeproject.org.cn/Articles/12363/Transform-between-IEEE-IBM-or-VAX-floating-point-n?fid=236108&df=90&mpp=10&noise=1&prof=True&sort=Position&view=Expanded&spc=None&fr=1#xx0xx

使用代码

此处包含的解决方案包含一个测试项目,演示了一个简单的 IBM 浮点数转换。由于立即的需求是 IBM 浮点数支持,因此并非代码转换的每个方面都经过了测试。欢迎其他人参与 VAX 或 IEEE 部分的工作。所有代码均采用 C# 编写。

主要的类库是 Converter。它可以被调用为

 

Converter c =new Converter();
byte[] bytes = new byte[] { 0x00, 0x00, 0x00, 0x80, 0x31, 0x93, 0x60, 0x48 };
double d = c.ConvertBytesToDouble(Platform.IbmFloat, bytes);


Console.WriteLine("Correct return value should be: " + 1620259200);
Console.WriteLine("Return Value:                   " + d);
Console.WriteLine();
Console.WriteLine("Press any key to continue...");
Console.Read();

Converter 类中可用的其他方法是

  • ConvertDoublesToBytes - 将 double 值转换为 byte 数组
  • ConvertSingleToBytes - 将单个 float 值转换为 byte 数组

所有方法都将接受一个 Platform 枚举,指示原始字节或双精度浮点数的来源。

历史

2012-11-12 初始版本。

© . All rights reserved.