2012-05-09 17 views
6

dizisi inşa Ben bir server.I göndermek için gereken bayt dizisi oluşturmak için bir MemoryStream kullanıyorum tasarımda soru var bundan daha mı bayt? Bu kod pice hafızam akışında sahte yazıyor NedenMemoryStreambaytlık ve bayt

2)? i akışında $ yerine 3E6C değeri $ 6F32 eklenir görüyoruz ayıklayıcısını kullanma

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) i

MS.Position := 2; 

arayıp i yerine üçüncü akışında ilk byte olsun neden sonra ben PByte (MS.Memory)^erişirseniz?

+3

belirli bir konumda bir byte okumak için kullanımı 'MS.Read (SomeByte, 1) 'konumu ayarlandıktan sonra. –

cevap

9

bundan daha bayt dizisi oluşturmak için daha iyi bir yolu var mı?

Bunu yapmak benim için mantıklı bir yol.


Ben akışında $ yerine 3E6C değeri $ 6F32 eklenir görüyoruz.

Kontrol tekrar. Doğru değerler aslında eklenmiştir. Ancak küçük endian veri türlerinin tuzaklarına dikkat edin. sırayla, Akışınıza eklenen 4 bayt şöyledir: $ 72, $ 72, $ 6C, $ 3E.


yerine neden üçüncü akışında ilk byte alabilirim?

Memory özelliği her zaman akışının başlangıcını belirtir. Akımın mevcut konumunu dikkate almaz.

+0

Teşekkür sonra P yapın: = Stream.Memory; Inc (P, Akım Noktası); doğru işaretçiyi almak için – opc0de

+1

net şeyler Her zaman bir PByte olarak işaretçi alabilirsiniz ve yapmak için çok –