İyi günler herkese;
Bugünlerde fazla soru soruyorum ama kusura bakmayın lütfen;
benim yeni sorum şu;
farklı bir network ortamından gelmiş bilgi maalesef uyuşmuyor. Gelen bilgi little endian ve maalesef delphi big endian.
8 ve 16 bitlik gelen bilgilerde swap komutu ile bunu değiştirebiliyorum fakat bunu 32 bite uyguladığım zaman maalesef başarısız oluyorum. İnternetten araştırdığım zaman bunun için bulduğum tek yanıt ise
" longint shr 16 " ile yapmak ama buda sadece ilk 2 byte iç.in değer veriyor maalesef 32 bitlik bir bilgiyi çevirmiyor.
swap 16 bit - 32 bit sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- seandillon
- Üye
- Mesajlar: 50
- Kayıt: 04 Nis 2006 11:14
- Konum: istanbul
- İletişim:
swap 16 bit - 32 bit sorunu
Hayatta iki şey paylaşmaya değer, sevgi ve bilgi. sevgisiz bilgi, bilgisiz sevgi olmaz...
Re: swap 16 bit - 32 bit sorunu
CodeGear'da verilmiş örnek. bkz. http://dn.codegear.com/article/28964
Kullanımı ise
Kod: Tümünü seç
type
//enumeration used in variant record
BytePos = (EndVal, ByteVal);
PEndianCnvRec = ^EndianCnvRec;
EndianCnvRec = packed record
case pos: BytePos of
//The value we are trying to convert
EndVal: (EndianVal: double);
//Overlapping bytes of the double
ByteVal: (Bytes: array[0..SizeOf(Double)-1] of byte);
end;
//A gets B's values swapped
procedure SwapBytes( A, B: PEndianCnvRec );
var
i: integer;
begin
for i := high(A.Bytes) downto low(A.Bytes) do
A.Bytes[i] := B.Bytes[High(A.Bytes) - i];
end;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c: EndianCnvRec;
begin
a.EndianVal := 23344.55555;
SwapBytes(@b,@a);
ShowMessage(FloatToStr(b.EndianVal));
SwapBytes(@c,@b);
ShowMessage(FloatToStr(c.EndianVal));
end;