簡體   English   中英

MemoryStream並構造一個字節數組

[英]MemoryStream and constructing an array of bytes

我正在使用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)^為什么我得到流中的第一個字節而不是第三個字節?

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

在我看來,這是一種非常合理的方式。


我看到在流中添加了價值$ 6F32而不是$ 3E6C。

再檢查一遍。 實際上添加了正確的值。 但要注意小端數據類型的陷阱。 按順序添加到流中的4個字節是:$ 72,$ 72,$ 6C,$ 3E。


為什么我得到流中的第一個字節而不是第三個字節?

因為Memory屬性始終引用流的開頭。 它沒有考慮流的當前位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM