[Delphi] Jak dokonać rozkładu liczby na LSB i MSB

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

[Delphi] Jak dokonać rozkładu liczby na LSB i MSB

Post autor: gwozdex » 10 lut 2008, 17:39

Witam! Szukałem w helpie ale nic nie znalazłem...Chodzi mi o "wyłupanie" z liczby 2- bajtowej bajtu starszego i młodszego. Myślałem ze polecenia LOW i HIGH załatwią sprawę, niestety się myliłem bo one służą do czegoś zupełnie innego. Napisałem taki oto programik (fragment):

Kod: Zaznacz cały

procedure TForm1.Button1Click(Sender: TObject);
var
l: word;
MSB, LSB: byte;
begin
  l:= strtoint(labelededit1.Text);
  LSB:= l and 255;
  MSB:= l and 65280;
  labelededit2.Text:= inttostr(MSB);
  labelededit3.Text:= inttostr(LSB) ;
end;
Bajt młodszy wyświetla się poprawnie, ale MSB nie... Proszę o wskazówki!
Pozdrawiam!

Awatar użytkownika
joon
Użytkownik
Posty: 2076
Rejestracja: 30 cze 2007, 22:56
Lokalizacja: Kraków, Przemyśl, Warszawa
Kontakt:

Post autor: joon » 10 lut 2008, 17:44

Coś podobnego w Pascalu robiło się dzieląc liczbę dwu bajtowa przez 256 bez reszty, tak mi się wydaje przynajmniej. Dawno już Pascala na oczy nie widziałem :D

ZbeeGin

Post autor: ZbeeGin » 10 lut 2008, 17:45

Nie przesunąłeś bitów o osiem pozycji w prawo.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 10 lut 2008, 20:52

Nie przesunąłeś bitów o osiem pozycji w prawo.
Mam rozumieć że w zamian operacji:

Kod: Zaznacz cały

MSB:= l and 65280
polecasz przesunąć "w dół" starszą część liczby a potem ponownie
wykonać polecenie

Kod: Zaznacz cały

MSB:= l and 256
.
Może jeszcze inaczej??
Pozdrawiam i dziekuję!

elektronWielki
Użytkownik
Posty: 247
Rejestracja: 30 maja 2006, 12:45
Lokalizacja: kontownia

Post autor: elektronWielki » 10 lut 2008, 23:10

sprawdź to:

Kod: Zaznacz cały

procedure TForm1.Button1Click(Sender: TObject);
var
l: word;
MSB, LSB: byte;
begin
  l:= strtoint(labelededit1.Text);
  LSB:= byte(l);
  MSB:= byte(l shr 8);
  labelededit2.Text:= inttostr(MSB);
  labelededit3.Text:= inttostr(LSB) ;
end;

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 10 lut 2008, 23:24

:arrow: elektronWielki
Pięknie to zrobiłeś.
Dziękuję za pomoc.

jakubzz
-
Posty: 11
Rejestracja: 30 wrz 2006, 11:02

Post autor: jakubzz » 11 lut 2008, 10:00

Witam,
to ja jeszcze zaproponuje takie rozwiązanie:

Kod: Zaznacz cały

MSB:= l div 256;
LSB:= l mod 256;

ODPOWIEDZ