Newsgroup: it.comp.lang.delphi
Titolo: Prendere in giro un Word

Salve vi chiedo un aiutino ;)
Dovrei girare un Word cioè $1234 farlo diventare $4321.
Come faccio.
Grazie
P.S E se fosse anche un LongWord?
Non sono un vero programmatore sono nella fase "Hello World" :(

 Come faccio.
se hai un intero, lo converti in esadecimale, quindi rovesci la stringa,
infine, se ti serve, lo riconverti in intero. Cos'e' che non sai fare,
esattamente, di quanto sopra? Le funzioni di conversione da/a esadecimale
sono nell'help, idem per le funzioni stringa.
Ciao, Sandro



prova
function inverte (num:integer):integer;
var num1,x1 : integer;
begin
   num1 := 0;
   while(num>0) do
   begin
     x1 := num and $f;
     num1 := num1*16+x1;
     num := num div 16;
   end;
   inverte := num1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  edit1.text:=inttohex(1213123,1);
  edit2.text:=inttohex(inverte(1213123),1);
end;
ciao
-- 
--------------------------------------
Per rispondere in privato togliere ADD1975
Creato con M2, il rivoluzionario client e-mail di Opera: 
http://www.opera.com/m2/

> Dovrei girare un Word cioè $1234 farlo diventare $4321.

Non uso proprio Il Delphi uso Lazarus su linux e delphi compatibile ma non
ha una Documentazione esaustiva .In delphi come si converte una stringa a
esadecimale?
Grazie

> In delphi come si converte una stringa a esadecimale?
se non sbaglio c'e' una funzione IntToHex. Non ho verificato sull'help e non
ho mai usato questo genere di funzioni (per i miei applicativi non servono).
E comunque potresti anche scrivere due righe in croce di procedura che segua
pedissequamente il metodo scolastico: dividere per 16, prendere il resto,
dividere il quoziente per 16, ecc. fino a che non arrivi a 1; a quel punto
metti tutti i resti in ordine inverso e ottieni la rappresentazione
esadecimale del numero originale.
Ciao, Sandro

 Non sono un vero programmatore sono nella fase "Hello World" :(H6
Ho sbagliato devo trasformare $1234 in $3412

Function InvertiWord(W : Word) : Word;
Begin
    Result := ((W And $FF00) Shr 8) + ((W And $00FF) Shl 8);
End;
Spiego:
W And $FF00 preleva la parte piu' significativa della word e Shr 8 la sposta di 8 byte sulla destra.
W And $00FF preleva la parte meno significativa della word e Shl 8 la sposta di 8 byte sulla sinistra.
Facciamo un esempio:
W = $1234;
La parte piu' significativa viene elaborata cosi':
W And $FF00 = $1200 poi Shr 8 = $0012
Mentre la meno significativa
W And $00FF = $0034 poi Shl 8 = $3400
Ora non basta altro che sommarli ed otteniamo:
W = $3412
Ciao,
David

W = $3412
Che sei un cracker ;) ? 
Invidio quelli che ragionano esadecimale con la stessa facilita' con cui si
mangiano i ravioli...
:)
-- 
Morde. 
(
mo...@despammed.com
)

 cui si mangiano i ravioli...
Non e' cosi' difficile... :-) Io usavo il codice esadecimale gia' a 10 anni
(avevo un Texas Instruments TI-99/4A, e per la grafica bisognava usare
quello...)

    Result := ((W And $FF00) Shr 8) + ((W And $00FF) Shl 8);
Non è necessario fare quegli "and", ci scrivi sopra quando fai scorrere 
rispettivamente a destra e sinistra; quindi basterebbe:
aNewWord := aWord shl 8 + aWord shr 8;
Per i non amanti dei bitwise operators si può sempre ricorrere anche a 
aWord := MakeWord(Hi($1234), Lo($1234));
Ciao :-)
Andrea /\/\agni -- DeD Support Team (
http://www.dedonline.com
)
--- posted by geoForum on 
http://delphi.newswhat.com

E perchč mai? Io ho iniziato a programmare in assembler e devo dire che conoscere la programmazione a livello macchina
semplifica la vita di un programmatore
--
Ciao,
David (
www.utilityweb.net
)

 rispettivamente a destra e sinistra; quindi basterebbe:
Giusto! Mea culpa e questione di abitudine.
--
Ciao,
David (
www.utilityweb.net
)

semplifica la vita di un programmatore
Beh... diciamo che per certi ambiti e' vero, per altri non e' necessario.
Meno male che c'e' delphi, programmare in ASM non sarebbe stato cosi'
"facile"!
ciao
-- 
Morde. 
(
mo...@despammed.com
)

 "facile"!
Concordo. Tieni presente che personalmente creo programmi di gestione per macchine robotizzate e per la comunicazione a
basso livello, per la gestione di driver di scheda, nonchè per alcuni tipi di calcoli necessito della notazione
esadecimale.
Se poi si programmano gestionali la situazione cambia. No?
--
Ciao,
David (
www.utilityweb.net
)