6

サーバーに送信する必要があるバイトの配列を作成するために MemoryStream を使用しています。3 つの質問があります。

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;

デバッガーを使用すると、ストリームに $3E6C ではなく $6F32 の値が追加されていることがわかります。

3) 電話したら

MS.Position := 2;

次に、PByte(MS.Memory)^ にアクセスします。ストリームの 3 番目のバイトではなく、最初のバイトを取得するのはなぜですか?

4

1 に答える 1

9

これよりもバイトの配列を作成するためのより良い方法はありますか?

私の見解では、それは完全に合理的な方法です。


ストリームに$3E6Cではなく$6F32の値が追加されていることがわかります。

もう一度チェック。実際には正しい値が追加されています。ただし、リトルエンディアンのデータ型のトラップに注意してください。ストリームに追加される4バイトは、順番に、$ 72、$ 72、$ 6C、$3Eです。


ストリームの3番目ではなく最初のバイトを取得するのはなぜですか?

Memoryプロパティは常にストリームの先頭を参照するためです。ストリームの現在の位置は考慮されません。

于 2012-05-09T11:19:38.767 に答える