2012-05-09 27 views
6

數組我使用一個MemoryStream來構建一個字節數組,我需要發送到server.I有THRE問題:的MemoryStream和建設字節

1)是否有更好的方法來構建數組字節比這個?

2)爲什麼這些代碼在我的內存流中寫入虛假?

var 
    serial : word; 
    MS : TMemoryStream; 
const 
    somebytes : array [0..1] of byte = ($72,$72); 
... 
begin 
     MS := TMemoryStream.Create(); 
     try 
     MS.Write(somebytes[0],2); 
     serial := $3E6C; 
     MS.Write(serial,2); 
     finally 
     MS.Free; 
end; 

使用調試器,我看到在流中添加的值是$ 6F32而不是$ 3E6C。

3)如果我叫

MS.Position := 2; 

,然後我訪問PBYTE(MS.Memory)^爲什麼我流的,而不是第三獲得的第一個字節?

+3

要讀取特定位置的字節,請在設置位置後使用'MS.Read(SomeByte,1)'。 –

回答

9

有沒有比這更好的方式來構造一個字節數組?

在我看來,這是完全合理的方式。


我看到流中增加的價值$ 6F32而不是$ 3E6C。

再次檢查。實際上增加了正確的值。但要小心小端數據類型的陷阱。按順序添加到您的流中的4個字節是:72美元,72美元,6美元,3美元。


爲什麼我流,而不是第三獲得的第一個字節?

因爲Memory屬性始終指向流的開始。它不考慮流的當前位置。

+0

非常感謝您爲此做出了明確的指示 – opc0de

+1

您始終可以將指針指定爲PByte,然後執行P:= Stream.Memory; Inc(P,Stream.Position);得到正確的指針 –

相關問題