2009-06-29 25 views
0

選擇轉換(VARBINARY(8)中,1)在MS SQL服務器產生輸出:00000001數據集的TB的柱和SQL VARBINARY場組合

論在Delphi分配上述查詢數據集,和訪問字段值,我們得到字節數組爲[1,0,0,0]。因此Bytes [0]包含1.

當我在這個字節數組上使用IntToHex()時,它會導致我的值爲「10000000」。

爲什麼IntToHex會以相反順序考慮它?

感謝&問候,

帕。

回答

2

我想你忘了在代碼中加入一個引用,你在某個TBytes陣列上調用IntToHex。這是從您的上一個問題的答案,how to convert byte array to its hex representation in Delphi

my answer中,我忘記了如何指示一個字節數組如何以big-endian順序來存儲字節,而IntToHex(以及x86上的其他所有內容)都希望它們按小端順序排列。解決方案是切換它們。我使用了這個功能:

function Swap32(value: Integer): Integer; 
asm 
    bswap eax 
end; 

在此期間,我確定了我的答案來解釋這一點。

0

這似乎是一個little/big endian的問題。只需從IntToHex中反轉字節數組或返回值即可。另一種方式是自己動手:

myInt = Bytes[0]; 
Inc(myInt, (Bytes[1] shl 8)); 
Inc(myInt, (Bytes[2] shl 16)); 
Inc(myInt, (Bytes[3] shl 24)); 

另外要小心的跡象。 SQL值是帶符號還是無符號 - Delphi數據類型應該與此匹配(int/longint已簽名,Longword/Cardinal未簽名 - 請參閱here或在Delphi幫助中)。

0

由於x86 CPU使用little-endian編號,因此編號系統按相反順序排列其字節。您需要交換字節順序以獲得正確的值。