解码Decimal64数据

时间:2010-05-31 14:57:50

标签: c# .net decimal

我正在寻找一种简单的方法来解码使用C#解码以Decimal64格式存储的数据(此处描述:http://en.wikipedia.org/wiki/Decimal64_floating-point_format)。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

到处寻找它,最后我们自己实现了它。

<强>更新 你们中的一些人已经向我们询问了代码 - 这是我们的代码,我们称之为Float Decimal,我认为它与Decimal 64的匹配 - 但不保证 - 请自行检查。

另请注意 - _size的值应为8。

 if (bytes[0] == 0) return 0;
        var s = "";
        for (var i = 1; i < bytes.Length; i++)
            s += bytes[i].ToString("X").PadLeft(2, '0');
        return decimal.Parse("." + s.TrimEnd('0')) * (decimal)Math.Pow(10 , ((bytes[0] & ~128) - 64)) * ((bytes[0] & 128) > 0 ? -1 : 1);

保存:

 if (value != 0)
        {
            var negative = value < 0;
            var s = value.ToDecimal().ToString(CultureInfo.InvariantCulture).TrimStart('-', '0');
            var i = s.IndexOf('.');
            if (i >= 0)
            {
                s = s.Remove(i, 1);
                if (i == 0)
                {
                    i = s.Length;
                    s = s.TrimStart('0');
                    i = s.Length-i;
                }
            }
            else i = s.Length;
            bytes[0] = (byte)(64 + i + (negative ? 128 : 0));
            s = s.PadRight((_size - 1) * 2, '0');
            for (var j = 1; j < _size && (j - 1) * 2 < s.Length; j++)
                bytes[j] = byte.Parse(s.Substring((j - 1) * 2, 2), System.Globalization.NumberStyles.HexNumber);
        }

答案 1 :(得分:0)

那里读得有点太快了。

我想你想看看C#中的BitConverter.ToSingle方法,但是要反转字节的顺序才能得到正确的结果。 :)

B.R Jaggernauten