Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[PASCAL] - [VB] Code translation

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[PASCAL] - [VB] Code translation

Messaggioda DilanDog » mar ott 25, 2005 5:10 pm

Ho un pezzo di codice in pascal che dovrei tradurre in VB, qualcuno può aiutarmi? Per me è arabo [:(!]


function crcvalue (stringtoeval : string): integer;
var
count: byte;
tempcrc: word;
begin
tempcrc:=$FFFF;
for count:=1 to length (stringtoeval) do
begin
tempcrc:=swap(tempcrc) xor ord (stringtoeval [count]);
tempcrc:=tempcrc xor (lo (tempcrc) shr 4);
tempcrc:=tempcrc xor (swap (lo (tempcrc)) shl 4) xor (lo (tempcrc) shl 5)
end;
crcvalue:=tempcrc xor $FFFF
end; [of function crcvalue]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda DilanDog » mer ott 26, 2005 9:03 am

Riguardando con più calma il codice in pascal sono riuscito a capire quasi tutto. Le uniche righe che restano oscure sono quelle contenute all'interno del ciclo, ovvero:

tempcrc:=swap(tempcrc) xor ord (stringtoeval [count]);
tempcrc:=tempcrc xor (lo (tempcrc) shr 4);
tempcrc:=tempcrc xor (swap (lo (tempcrc)) shl 4) xor (lo (tempcrc) shl 5)

Ci sono alcune funzioni di cui non conosco il significato:

SWAP = Inverte l'ordine dei byte, giusto?
LO = Restituisce il byte meno significativo della variabile passata come argomento, giustio?

ORD() = ?
SHR = ?
SHL = ?

Se qualcuno mi aiuta a capire a cosa servono queste tre funzioni direi che sono a posto [applauso]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Xerex » mer ott 26, 2005 11:29 am

DilanDog ha scritto:SWAP = Inverte l'ordine dei byte, giusto?
LO = Restituisce il byte meno significativo della variabile passata come argomento, giustio?

ORD() = ?
SHR = ?
SHL = ?

Se qualcuno mi aiuta a capire a cosa servono queste tre funzioni direi che sono a posto [applauso]


Dalle mie rimembranze di pascal, SWAP dovrebbe serevire ad invertire il contenuto di due variabili senza utilizzare var di appoggio.
una cosa come a=5; b=6; swap(a,b) --> a=6 b=5
anche se vista la sintassi della riga che hai postato sembra che prenda un solo parametro...

shr e shl....beh...mi sanno di shift...comunque...tutto questo per dimostrare che non ricordo nulla di pascal e che ti consiglio di cercare un manualino di pascal in rete...

il primo che ho trovato e' questo...vedi se trovi qualcosa
http://freeweb.supereva.com/programmare ... dex.html?p
Fare la grigliata, è sempre una figata!
Avatar utente
Xerex
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5948
Iscritto il: lun ago 05, 2002 9:36 am
Località: Parma(Pr)


Messaggioda Silver Black » mer ott 26, 2005 5:37 pm

DilanDog ha scritto:tempcrc:=swap(tempcrc) xor ord (stringtoeval [count]);
tempcrc:=tempcrc xor (lo (tempcrc) shr 4);
tempcrc:=tempcrc xor (swap (lo (tempcrc)) shl 4) xor (lo (tempcrc) shl 5)


SWAP è una funzione definita da qualche altra parte, perché almeno in Delphi non esiste.

LO restituisce il byte di ordine inferiore di un intero da 2 bytes come singolo byte.

Es.:
Codice: Seleziona tutto
 var
  i : Integer;

begin
  i := $2345;  // $2345 hex : $23 hi byte, $45 lo byte
  ShowMessage(Format('Integer = $%x', [i]));
  ShowMessage(Format('Hi byte = $%x', [Hi(i)]));
  ShowMessage(Format('Lo byte = $%x', [Lo(i)]));
end;


Restituisce:

Integer = $2345
Hi byte = $23
Lo byte = $45


Ci sono alcune funzioni di cui non conosco il significato:

ORD restituisce il valore ordinale di un integer, char o enum. L'ORD di un carattere restituisce il suo codice ascii.

SHR - SHL eseguono lo shift di bytes rispettivamente a destra e a sinistra, di un numero di bit specificato.

Spero sia tutto quello che ti serve, in caso chiedi pure!
Sergio Pappalardo aka Silver Black
CyberInstaller - www.silvercybertech.com - http://silvercybertech-labs.com/cyberblog
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1147
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Bassano del Grappa (VI)

Messaggioda DilanDog » gio ott 27, 2005 11:54 am

Vediamo se ho capito bene il funzionamento di shl e shr....

Poniamo la variabile test=0x34

34 in binario = 110100
shr 4 = 110100 = 4
shl 4 = 110100 = 4
shl 5 = 110100 = 14


Giusto? Si vede che in vb le funzioni di shift non ci sono... [cry]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda DilanDog » ven nov 04, 2005 2:43 pm

DilanDog ha scritto:Vediamo se ho capito bene il funzionamento di shl e shr....

Poniamo la variabile test=0x34

34 in binario = 110100
shr 4 = 110100 = 4
shl 4 = 110100 = 4
shl 5 = 110100 = 14


Giusto? Si vede che in vb le funzioni di shift non ci sono... [cry]


Qualcuno riesce a chiarirmi le funzioni di shift shl e shr del pascal (vedi post precedente)? [cry+]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Xerex » ven nov 04, 2005 3:02 pm

Lo shift sposta tutti bit di n posti:

se hai 11001101
e lo shifti da una parte di diciamo 3 ottieni:

00011001

dall'altra

01101000
Fare la grigliata, è sempre una figata!
Avatar utente
Xerex
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5948
Iscritto il: lun ago 05, 2002 9:36 am
Località: Parma(Pr)

Messaggioda DilanDog » mar nov 22, 2005 10:45 am

Alla fine sono riuscito a trovare una libreria che mi calocla direttamente il CRC di una stringa (il pezzo di codice in pascal serviva proprio a quello) ed ho risolto il problema [applauso]

Grazie a tutti comunque [^]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising