gpt4 book ai didi

c# - Delphi 扩展到 C#

转载 作者:行者123 更新时间:2023-11-30 16:33:40 27 4
gpt4 key购买 nike

如何将浮点 10 字节十六进制字符串(Delphi 中的扩展数据类型)转换为 C# 数据类型?

例如:00 00 00 00 00 00 00 80 ff 3f 在 Delphi 1

最佳答案

涉及同样的问题,分享我的解决方案,有人会觉得有用:

        var extendedSize = 10;
var buf = new byte[extendedSize];

// Populate buffer with something like: { 0x00, 0x68, 0x66, 0x66, 0x66, 0x66, 0x66, 0xA2, 0x02, 0x40 } = 10.15
// Read(buf, extendedSize);

var sign = (buf[extendedSize - 1] & 0x80) == 0x80 ? -1 : 1;
buf[extendedSize - 1] = (byte)(buf[extendedSize - 1] & 0x7F);
var exp = BitConverter.ToUInt16(buf, extendedSize - 2);
var integral = (buf[extendedSize - 3] & 0x80) == 0x80 ? 1 : 0;

// Calculate mantissa
var mantissa = 0.0;
var value = 1.0;
var fractal = BitConverter.ToUInt64(buf, 0);

while (fractal != 0)
{
value = value / 2;
if ((fractal & 0x4000000000000000) == 0x4000000000000000) // Latest bit is sign, just skip it
{
mantissa += value;
}
fractal <<= 1;
}

return sign * (Math.Pow(2, exp - 16383)) * (integral + mantissa);

代码需要通过 NaN 和 Inf 检查进行改进,并且可能需要将“double”替换为“decimal”。

关于c# - Delphi 扩展到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2943660/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com