2012-05-09 1 views
6

의 배열 구성 나는이 server.I에 보낼 필요가 바이트의 배열을 구성하기 위해 MemoryStream을 사용하고는 THRE 질문이 바이트보다?MemoryStream을 바이트

2) 왜이 코드는 메모리 스트림에 가짜 코드를 작성합니까? I 스트림 대신 $ 3E6C의 값 $ 6F32에 추가되어 참조 디버거를 사용

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; 

.

3) 제가

MS.Position := 2; 

전화 내가 아닌 번째의 스트림의 첫번째 바이트를 얻을 왜 그때 PByte (MS.Memory)에 액세스하는 경우 ^?

+3

특정 위치에서 바이트를 읽으려면 위치를 설정 한 후'MS.Read (SomeByte, 1)'을 사용하십시오. –

답변

9

이보다 더 좋은 방법으로 바이트 배열을 구성 할 수 있습니까?

내 생각에 그렇게하는 것이 합리적으로 좋은 방법입니다.


내가 스트림 대신 $ 3E6C의 가치 $의 6F32를 추가 것을 알 수있다.

다시 확인하십시오. 실제로 올바른 값이 추가되었습니다. 그러나 리틀 엔디안 데이터 유형의 함정에주의하십시오. 스트림에 추가 된 4 바이트는 $ 72, $ 72, $ 6C, $ 3E입니다.


왜 내가 대신 세 번째의 스트림의 첫 번째 바이트를받을 수 있나요?

Memory 속성은 항상 스트림의 시작을 참조하기 때문에. 스트림의 현재 위치를 고려하지 않습니다.

+0

대단히 고맙습니다. – opc0de

+1

언제든지 포인터를 PByte로 가져온 다음 P : Stream.Memory; Inc (P, Stream.Position); 올바른 포인터를 얻으려면 –