[Delphi] 4 bajty to int

0

jak zespolić 4 bajty w jednego integera ? ewentualnie w którym bicie jest zapisany minus ?

0

z tego co wiem - zapisany jest w pierwszym bicie
http://republika.pl/skowi_magik/
o ile dobrze pamiętam tam to wyczytałem

0

wymyśliełm sobie coś takiego
[code]
function makeint(b1,b2,b3,b4:byte):integer;
begin
if(b4 div 128)=1 then makeint:=-(b1+255b2+255255b3+255255255(b4 mod 128))
else makeint:=(b1+255b2+255255b3+255255255b4)
end;
[/code]

hmmm, pierwszym tzn najstaraszym ? i jak sie bajty podaje ? od najmniej znaczącego do najbardziej znaczącego ?

0

W systemie U2 jest to pierszy bit.
Jeżeli chcesz zaminić na naturalny kod binarny to negujesz i dodajesz jeden.

Jeżeli masz 2 liczby typu Byte:
A=$23 i B=-$45
to jeżeli chcesz je umieścić w jednym Word to robisz tak:
C := A shl 8 or (not B + 1);//(not B + 1) - zamiana -$45 na $45
wówczas otrzymasz liczbę:
C := $2345;
Jeżeli obydwie są ujemne to zmień znak obydwu.
Jeżeli chcesz z powrotem zmienić znak to jeszcze raz not C + 1
W asm jest łatwiej NEG :)

0

i sobie wykombinowałem tak :
moze nie najładniej ale zawsze cos i chyba dziala ok
[code]
function makeint(b1,b2,b3,b4:byte):integer;
var l1,l2,l3,l4:integer;
begin
l1:=b1;
l2:=b2 shl 8;
l3:=b3 shl 16;
l4:=b4 shl 24;
makeint:=l1 or l2 or l3 or l4;
end;

procedure makebyte(var b1,b2,b3,b4:byte;liczba:integer);
var l1,l2,l3,l4:integer;
begin
b1:=liczba and 255;
b2:=(liczba shr 8) and 255;
b3:=(liczba shr 16) and 255;
b4:=(liczba shr 24) and 255;
end;
[/code]

0

hmm z tego co pamietam z czasow gdy sie bawilem edytorami hexow zeby pocheatowac w jakis gierkach, to zawsze musialem odwracac wartosci, tzn jesli sobie przeliczylem ze liczba X w dziesietnym to powiedzmy FFE3 to trzeba bylo wpisac pod odpowiedni adres E3FF i z tego co pamietam to wlasnie ten drugi (e3) byl starszy.

0

type
T4Bytes = packed array[1..4] of Byte;
var
b1, b2, b3, b4: Byte;
int: Integer;
begin
T4Bytes(int)[1]:=b1;
T4Bytes(int)[2]:=b2;
T4Bytes(int)[3]:=b3;
T4Bytes(int)[4]:=b4;
end;

Dziwna konstrukcja, ale teoretycznie powinna działać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1