Я ищу простой способ декодирования данных, хранящихся в формате Decimal64 (описано здесь: http://en.wikipedia.org/wiki/Decimal64_floating-point_format) с использованием C#.Декодирование данных Decimal64
Любые мысли?
Я ищу простой способ декодирования данных, хранящихся в формате Decimal64 (описано здесь: http://en.wikipedia.org/wiki/Decimal64_floating-point_format) с использованием C#.Декодирование данных Decimal64
Любые мысли?
Посмотрел везде для него, наконец, мы реализовали это сами.
Update Некоторые из вас просили нас код - вот наш код для него, мы называем это Float 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);
}
Прочитано немного слишком быстро.
Я думаю, вам нужно взглянуть на метод BitConverter.ToSingle в C#, но изменить порядок байтов, чтобы получить правильный результат. :)
B.R Jaggernauten
Это не дало нужного результата – Noam
@ user354662, я хотел бы знать алгоритм для декодирования decimal64 для двоичных и, необязательно, как это сделать в C++ для Linux. Спасибо. – Frank
@Noam, я хочу знать алгоритм декодирования decimal64 для двоичного и, необязательно, как это сделать в C++ для Linux. Спасибо – Frank
Не могли бы вы поделиться своей реализацией? – stimpie