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





4.00/5 (6投票s)
这是“在 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 的作品在这里有文档说明。
使用代码
此处包含的解决方案包含一个测试项目,演示了一个简单的 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 初始版本。