2010-05-31 20 views

回答

2

到處找它,我們終於實現了它自己。

更新 你們中有些人已要求我們的代碼 - 這是我們爲它的代碼,我們把它叫做浮動小數點,我認爲它匹配什麼十進制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); 
     } 
+0

你可以分享你的實施? – stimpie 2012-04-13 13:36:44

0

在那裏讀得太快了。

我想你應該看看C#中的BitConverter.ToSingle方法,但是顛倒字節的順序來得到正確的結果。 :)

B.R Jaggernauten

+0

這並沒有產生正確的結果 – Noam 2010-06-01 14:59:46

+0

@ user354662,我想知道的算法用於將decimal64解碼爲二進制文件,以及可選的如何在C++ for Linux中執行此操作。謝謝。 – Frank 2016-06-09 16:01:20

+0

@Noam,我想知道將decimal64解碼爲二進制的算法,以及可選的如何在C++ for Linux中進行解碼的算法。謝謝 – Frank 2016-06-09 16:02:45