2013-09-30 63 views
0

在Delphi的早期版本(我們使用德爾福2009年),在TFloatRec記錄(floatToDecimal使用)被定義爲德爾福XE5和TFloatRec和System.floatToDecimal

TFloatRec = packed record 
    Exponent: Smallint; 
    Negative: Boolean; 
    Digits: array[0..20] of AnsiChar; 
end; 

但是在Delphi XE5(我認爲這可以在XE3已經改變),它被定義爲..

TFloatRec = packed record 
    Exponent: Smallint; 
    Negative: Boolean; 
    Digits: array[0..20] of Byte; 
    end; 

我們用這個記錄擴展字段轉換爲RawByteString,任何人都可以提出我能做些什麼來調用的結果轉換爲FloatToDecimal成一個RawByteString。

語境

這種方法被稱爲同時從網絡通信讀取緩衝區,所以它需要儘可能快,無需轉換代碼頁,等等

+3

D2009和XE3的'TFloatRec'一點一滴都是一樣的。 –

+2

您確定從二進制轉換爲十進制,然後返回是最有效的解決方案嗎? –

+0

不,但這是我試圖改變的遺留代碼,一旦它工作,我就有機會爲它編寫測試並重構。 – Mmarquee

回答

4

您只需重新申報供自己使用的D2009的記錄:

type 
    TMyFloatRec = packed record 
    Exponent: Smallint; 
    Negative: Boolean; 
    Digits: array[0..20] of AnsiChar; 
    end; 

交換機現有的代碼使用此記錄,一切都會好的。

雖然它也可能很容易做到,你可以用新版本的TFloatRec做任何事情。畢竟ByteAnsiChar是相同的大小,你可以很容易地在一個和另一個之間。

+0

盯着代碼太久了。我已經定義了它在Delphi2009中的結構,並將其轉換爲DelphiXE5中的結構。 – Mmarquee