Newsgroup: it.comp.lang.delphi
Titolo: x A.Tarolla & S.Carboni

Vi ringrazio molto per i vostri consigli siete stati veramente preziosi.
Ora se posso approfittare ancora della vostra pazienza mi vorrei spostare in
un altro punto del problema.
Supponendo di dover applicare lo stesso ragionameto per il resto dei dati
riguardanti un singolo giocatore, avrei bisogno che mi spieghiate quello che
vi sto per postare.
premetto che ci sono delle parti di programma in VC++ e spero che voi lo
conosciate:
Appunti
-------
File : Select.bin
Offset Select.bin : 1E8178
Numero giocatori Nationals e ML : 22
Numero giocatori Under 23 : 18
Lunghezza caratteristiche     : 12
Numero squadre Nationals  : 54
Numero squadre Under 23  : 18
Numero No Contacted        : 327
Innesto : Nationals : 264F8-29CA8 (2140BC)
              Under 23 : 2A0C8
              No Contacted : 2AFF8
Esempio Base
Nome  Breen
Nat   EIRE
Ruolo CB
Num.  17
Alto  183
Anni  26
Puniz NO
Piede Right
Forze : 14 17 17 17 16 15 14 15 13 16 16 15 15 13 13 15
Pelle           : A
Capelli        : G1
Cap.Col.     : A
Faccia         : A
Faccia C.    : A
Corporat.    : D
Salto            : A
Codifica
21 01 30 C2 6C 4D 3B 4E 5D 34 32 01
Significato
Altezza : 148 + B3 shr 4 + (B4 & 03) shl 4
              (148 + 0x30 shr 4 + (C2 & 3) shl 4) =
              (148 + 3 + 0x20) = 151 + 32 = 183
Anni    : 15 + B5 shr 5 + (B6 & 03) shl 3
             (15 + 6C shr 5 + (4D & 03) shl 3) =
             (15 + 3 + 8) = 26
Piede   : (B6 shr 2) & 3
             (4D shr 2) & 3 = 0x13 & 3 = 3
Pelle   :  (B5 & 3) = 0
Shirt   : 1 + (B4 shr 2) & 0x1F
            1 + (C2 shr 2) & 0x1F =
            1 + 0x30 & 0x1F = 1 + 0x10 = 1 + 16 = 17
// now start to parse the 12 byte data
//1 shirt
m_playerlist[i]->shirt = 1 + ((m_data[3]>>2)&0x1f);
//2 position
m_playerlist[i]->position = m_data[0]&0x07;
//3 skincolor
m_playerlist[i]->skincolor = m_data[4]&0x03;
//4 hairstyle
m_playerlist[i]->hairstyle = ((m_data[0]>>4)&0x0f) + ((m_data[1]<<4)&0x10);
//5 haircolor
m_playerlist[i]->haircolor = (m_data[1]>>1)&0x07;
//6 facialhair
m_playerlist[i]->facialhair = (m_data[1]>>5)&0x07;
//7 facialhaircolor
m_playerlist[i]->facialhaircolor = (m_data[2]>>1)&0x07;
//8 height
m_playerlist[i]->height = 148 + ((m_data[2]>>4)&0x0f) +
((m_data[3]<<4)&0x30);
//9 build
m_playerlist[i]->build = (m_data[4]>>2)&0x07;
//10 age
m_playerlist[i]->age = 15 + ((m_data[4]>>5)&0x07) + ((m_data[5]<<3)&0x18);
//11 spike
m_playerlist[i]->spike = (m_data[11]>>3)&0x07;
//12 favoratefoot
m_playerlist[i]->foot = (m_data[11]>>6)&0x03;
//13 offense
m_playerlist[i]->offense = 12 + ((m_data[7]>>5)&0x07);
//14 defense
m_playerlist[i]->defense = 12 + (m_data[8]&0x07);
//15 bodybalance
m_playerlist[i]->bodybal = 12 + ((m_data[5]>>6)&0x03) +
((m_data[6]<<2)&0x04);
//16 stamina
m_playerlist[i]->stamina = 12 + ((m_data[6]>>1)&0x07);
//17 speed
m_playerlist[i]->speed = 12 + ((m_data[6]>>7)&0x01) + ((m_data[7]<<1)&0x06);
//18 acceleration
m_playerlist[i]->acceleration = 12 + ((m_data[7]>>2)&0x07);
//19 passacc
m_playerlist[i]->passacc = 12 + ((m_data[9]>>1)&0x07);
//20 shootpower
m_playerlist[i]->shootpower = 12 + ((m_data[8]>>3)&0x07);
//21 shootacc
m_playerlist[i]->shootacc = 12 + ((m_data[8]>>6)&0x03) +
((m_data[9]<<2)&0x04);
//22 jumppower
m_playerlist[i]->jumppower = 12 + ((m_data[10]>>2)&0x07);
//23 headacc
m_playerlist[i]->headacc = 12 + ((m_data[9]>>7)&0x01) +
((m_data[10]<<1)&0x06);
//24 technique
m_playerlist[i]->tech = 12 + ((m_data[9]>>4)&0x07);
//25 dribble
m_playerlist[i]->dribble = 12 + ((m_data[6]>>4)&0x07);
//26 curve
m_playerlist[i]->curve = 12 + ((m_data[10]>>5)&0x07);
//27 aggressive
m_playerlist[i]->aggressive = 12 + (m_data[11]&0x07);
//28 response
m_playerlist[i]->response = 12 + ((m_data[5]>>2)&0x07);
//29 outside
m_playerlist[i]->outside = (m_data[3]>>7)&0x01;
Grazie ancora

 m_playerlist[i]->shirt = 1 + ((m_data[3]>>2)&0x1f);
tutto il resto del codice che segue come spiegarlo ?
"m_playerlist[i]" sembra un oggetto lista con delle proprietà ( shirt ad
esempio ).
A queste proprietà vengono assegnati i valori nell'espressione di destra.
"m_data" sarà un array.
L'operatore >> è sempre uno shift su bit.
In effetti SHR e SHL appartengono a Delphi ora quindi ho qualche dubbio.
Non ho altro da dirti anche perchè non so cosa vuoi sapere di preciso, cosa
vuoi ottenere dal codice..... e poi vado più d'accordo con del codice Delphi
invece del VC++ o C++ o suoi antenati, figli ecc ecc...
Ti saluto....ciao ciao !!
Antonio Tarolla

> m_playerlist[i]->shirt = 1 + ((m_data[3]>>2)&0x1f);
In Delphi si tradurrebbe :
m_playerlist[i]^.shirt = 1 + ((m_data[3] shr 2) and $1f);
o anche :
m_playerlist[i].shirt = 1 + ((m_data[3] shr 2) and $1f);
--
CyberWalkie - walkietalkie(at)
libero.it

 m_playerlist[i]->shirt = 1 + ((m_data[3]>>2)&0x1f);
tutto il resto del codice che segue come spiegarlo ?


 invece, esiste && e &.
si ricordo che ci sono due tipi di AND, ma non mi parlare dei simboli degli
operatori che altrimenti non saprei cosa dirti.
Invece per quanto riguarda SHR e >> dov'è la differenza ?
Forse è nel fatto che SHR non esiste in VC++ ed il codice riportato era già
stato mezzo tradotto ?
Ok, ti saluto....ciao ciao !!
Antonio Tarolla

 file://29 outside


 bit. In Delphi, come in Pascal, non c'e' differenza
Sarebbero gli operatori Short-Circuit vero?
Sinceramente non vedo perchè implementarli entrambi ...
--
- Carlo -
c.b...@libero.it

stato mezzo tradotto ?
SHR non esiste in VC++, non esiste ne' in C, ne' in C++.
Il suo ruolo e' svolto dall'operatore binario >>.
--
CyberWalkie - walkietalkie(at)
libero.it

Sinceramente non vedo perchè implementarli entrambi ...
Per evitare ambiguita'.
Io ritengo che sia meglio avere piu' operatori con UNA
semantica che UN operatore con piu' semantiche (da
scegliere, poi, a seconda della sintassi).
Ma e' una questione di scelte di implementazione.
In C, a dire il vero, si evitano situazioni antipatiche.
Per esempio, supposto che A, B, C e D siano variabili
intere, la seguente espressione come verrebbe valutata, in
Pascal ? :
if A = B and C = D then
begin
  ...
end ;
E' intuitivo leggerla come "se A e' uguale a B e C e' uguale
a D, allora...", invece in Pascal non e' cosi'.
L'and che si trova tra B e C viene considerato un and
bit-wise, da applicare come operazione binaria tra B e C.
Per questo, sull'uguale che segue C si ottiene un bel "then"
expected".
Invece, in C, questa situazione si traduce con :
if (A == B && C == D)
che viene valutata come ci si aspetterebbe ed e' ben
distinta da :
if (A == B & C)
--
CyberWalkie - walkietalkie(at)
libero.it

 solo danni.
Non ci piove.
Lo short-circuiting degli operatori presenta due vantaggi fondamentali, sia
evitare situazioni pericolose che velocizzare le operazioni.
Se non erro l'operatore booleano (a piů operandi) al quale non si puň
applicare lo Short-Circuiting č lo XOR.


applicare lo Short-Circuiting è lo XOR.
xor e' definito come :
A  B   A xor B
0  0      0
0  1      1
1  0      1
1  1      0
quindi, effettivamente, per lo xor lo short-circuiting non
viene mai sfruttato, in quanto, qualsiasi sia il valore
della prima sotto-espressione, il valore booleano della
seconda e' determinante ai fini del risultato.
--
CyberWalkie - walkietalkie(at)
libero.it