Autore Topic: hesadecimale >>>> decimale  (Letto 2782 volte)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
hesadecimale >>>> decimale
« il: 04 Giugno 2008, 22:51:01 »
come si converte un numero  esadecimale in decimale?

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: hesadecimale >>>> decimale
« Risposta #1 il: 05 Giugno 2008, 00:15:44 »
A questo indirizzo c'è una serie di semplici comandi bash
per la conversione.

http://linuxcommando.blogspot.com/2008/04/quick-hex-decimal-conversion-using-cli.html

Sicuramente ci deve essere la funzione appropriata in Gambas.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: hesadecimale >>>> decimale
« Risposta #2 il: 05 Giugno 2008, 12:35:41 »
grazie giulio, non mi piace molto usare la shell per la conversione, spero che esista un comando gambas..
per ora ho tamponato così:

Codice: [Seleziona]


PUBLIC sDecimale AS Integer
PUBLIC sHesa AS String
PUBLIC sperc AS Float

PUBLIC SUB conversione()
  DIM p AS Integer
  DIM i AS Integer
  DIM lettera AS String
  DIM sBinario AS String
  DIM binario AS String
  DIM intero AS String
  DIM numero AS String
  DIM x AS Integer
 
  p = Len(shesa)
 
'conversione esdecimale>>>>>>>><
  FOR i = 1 TO p
 
    lettera = Mid$(shesa, i, 1)
   
    IF lettera = "0" THEN numero = "0000"
    IF lettera = "1" THEN numero = "0001"
    IF lettera = "2" THEN numero = "0010"
    IF lettera = "3" THEN numero = "0011"
    IF lettera = "4" THEN numero = "0100"
    IF lettera = "5" THEN numero = "0101"
    IF lettera = "6" THEN numero = "0110"
    IF lettera = "7" THEN numero = "0111"
    IF lettera = "8" THEN numero = "1000"
    IF lettera = "9" THEN numero = "1001"
    IF lettera = "a" THEN numero = "1010"
    IF lettera = "b" THEN numero = "1011"
    IF lettera = "c" THEN numero = "1100"
    IF lettera = "d" THEN numero = "1101"
    IF lettera = "e" THEN numero = "1110"
    IF lettera = "f" THEN numero = "1111"
   
    sBinario = sbinario & numero
   
   NEXT
   x = 1
   'conversione binario>>>>>>>>>decimale
   FOR i = 1 TO 16
   
      binario = Mid$(sBinario, i, 1)
     
      intero = Val(binario) * x
      x = x * 2
      sDecimale = sDecimale + intero  
    NEXT

  sperc = (sDecimale * 100) / 65535 ' calcolo valore percentuale
  sperc = Val(Format(sperc, "##.00"))
END
 

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: hesadecimale >>>> decimale
« Risposta #3 il: 05 Giugno 2008, 13:29:20 »
Beh, è il bello di GNU/linux. Tanti modi per fare la stessa cosa. Pura libertà. :-)

Io per pigrizia :-) avrei fatto così:

Codice: [Seleziona]


PUBLIC SUB Main()
 
  DIM sHesa, sShellOutput AS String
  DIM iDecimale AS Integer
 
  sHesa = "0x15a"
 
  SHELL "printf '%d\n' " & sHesa TO sShellOutput
  iDecimale = Val(sShellOutput)

  PRINT iDecimale  
 
END


Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: hesadecimale >>>> decimale
« Risposta #4 il: 05 Giugno 2008, 14:55:53 »
Esagerati!
La conversione è alla portata di gambas, come per quasiasi altro linguaggio, occorre solo sapere la logica dell'esadecimale.

Tenendo presente che una cifra esadecimale rappresenta un valore compreso tra 0 e 15 (0 compreso), e che quindi per passare alla cifra successiva (maggiore) basta moltiplicare per 16, a questo punto si può fare in modo inverso.

Ora, capire da dove partire... o prendere e calcolare la cifra direttamente sul valore binario, se presente... oppure, se abbiamo una stringa ASCII (es. FF00), è necessario analizzare i singoli caratteri. La cosa è piuttosto semplice in tutti e due i casi.
Se teniamo presente che le cifre da 0 a 9 esadecimali sono esattamente corrispondenti a 0/9 decimali, e che i caratteri esadecimali da A a F sono la rappresentazione dei valori decimali da 10 a 15, credo sia facile capire come convertirli...

Se stiamo trattando un valore rappresentato come stringa, basta prendere il codice Asc(mid(value,n,1)), toglierli il valore 48 (il carattere "0"), e abbiamo il primo valore converito in decimale.
Se iniziamo a leggere la stringa esadecimale da sinistra verso destra (ovvero dalla più grane alla più piccola), dobbiamo sommare ogni valore convertito, moltiplicando però prima il valore precedente per 16.

Esempio:

s = "FA0C"
s = Upper(s) 'devono corrispondere esattamente alla tabella ASCII
value = 0
'loop estrazione caratteri
FOR n = 0 TO Len(s)
 'prendo il carattere
 c = Mid(s,n,1)
 'ne estraggo il codice ASCII che, ricordo, corriponderà
 'ai valori 0-9 A-F, come da sequenza nella tabella ASCII
 v = Asc(c)
 'elimino 48 per portarlo a dimensione numerica
 v = v - 48
 'moltiplico il valore precedente per 16,
 'ovviamente la prima volta sarà 0
 value = value * 16
 'ci aggiungo il valore convertito
 value = value + v
NEXT
RETURN value

Questo è ovviamente un esempio, e per il momento non ho modo di fornire un esempio di codice reale, dato che sono fuori casa, ma spero vi sia utile, anche come teoria.

Ciao!

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: hesadecimale >>>> decimale
« Risposta #5 il: 05 Giugno 2008, 22:18:34 »
@md9327

bel post. salvato tra i miei howtos.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: hesadecimale >>>> decimale
« Risposta #6 il: 05 Giugno 2008, 23:43:28 »
Scusate ma un semplice Intero = VAL(Stringa_Esadecimale) non è più semplice? Perché complicarsi la vita?
Esempio:
Codice: [Seleziona]

strEsadecimale = "&h4b56"
intIntero = VAL(strEsadecimale)

Restituisce 19286 come deve essere.  :oops:
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: hesadecimale >>>> decimale
« Risposta #7 il: 06 Giugno 2008, 14:31:22 »
Bravo leo, ma questo comporta il fatto che tu conosca bene quello che stai facendo, e a volte non è così...
Ad ogni modo, il mio era solo un consiglio e un aiuto, anche per allargare le conoscenze, dato che mi era sembrata scarsa riferita alla codifica esa; ovviamente il tuo è diretto e semplice.

Sai, a volte le cose troppo facili ti lasciano lacune enormi a lungo andare...

Salutoni !!!

 :2birre:  :coccole:

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: hesadecimale >>>> decimale
« Risposta #8 il: 10 Giugno 2008, 15:35:46 »
La tua è una considerazione più che giusta ma io parto dal presupposto che se voglio imparare i fondamenti della programmazione, allora mi scelgo un linguaggio di più basso livello, come ad esempio il C.

L'approdo a Gambas viene dalla ricerca di un linguaggio facile ma al tempo stesso potente, che ti mette a disposizione tutta una serie di strumenti già confezionati in modo tale che la preoccupazione principale del programmatore sia quella di pensare allo sviluppo della sua idea e non quella di doversi prima scrivere gli strumenti che gli serviranno per realizzare il suo progetto.

Certo che se non si conoscono certe basi si va poco lontani comunque.. però forse dimentichi anche che noi veniamo da un tipo di informatica che non esiste più. A me a scuola insegnavano a fare le operazioni binarie a mano... e le ossa me le sono fatte scrivendo codice Assembly per il mio Commodore 16, dove se non sapevi perché H2000 dà 8192 allora potevi spararti...
Basta vedere quanta ignoranza c'è a giro, a quanti pensano che 1 MB sia uguale a 1.000 di KB mentre invece sono 1.024... e che 1MB non è la stessa cosa di 1Mb...
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: hesadecimale >>>> decimale
« Risposta #9 il: 10 Giugno 2008, 16:51:30 »
Sono d'accordo con te, ma non su tutto...
Purtroppo, vedo come si fà programmazione in giro, senza avere quelle che tu dici basi sparite... lasciamo stare...
Non dico che tocca mettersi ancora a spremere il bit per non esaurire le risorse, ma già un piccola infarinatura su quello che stai utilizzando, credo sia utile oltre che essenziale.

Sai che mi ha detto un programmatore java tempo fà, alla domanda sul dubbio se il server cui doveva essere destinata la sua applicazione potesse avere problemi per farla girare:
Risposta: ma che me ne frega? Vuol dire che compreranno una macchina più potente!

... credo che le parole siano inutili ...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: hesadecimale >>>> decimale
« Risposta #10 il: 10 Giugno 2008, 17:28:58 »
La mentalità che ha codesto programmatore è purtroppo stata forgiata anche dal mercato, che ci ha fatto credere, nel corso degli anni, che per avere maggiori prestazioni dobbiamo per forza aggiornare l'hardware.
Assolutamente falso!!

Quando le architetture erano chiuse (nel senso di non aggiornabili) i programmatori facevano i salti mortali per spremere fino all'ultimo Hz di potenza. Mi ricordo i primi giochi per il mio C16: inguardabili! Roba tipo quelle vecchissime pseudo-console anni '80 con le 2 racchette che facevano "ping... pong..." sul televisore di casa. Ma dopo qualche anno era tutta un'altra musica.
Stesso discorso per l'Amiga: all'inizio le applicazioni facevano schifo, poi erano una figata pazzesca! Ti ricordi il C64 che parlava? Io dico che nemmeno la Commodore, quando lo mise fuori nell'83 (l'anno è giusto? non ricordo) pensava che avrebbe mai parlato.

E potrei continuare per ore.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: hesadecimale >>>> decimale
« Risposta #11 il: 10 Giugno 2008, 17:36:55 »
Citazione

leo72 ha scritto:
La mentalità che ha codesto programmatore è purtroppo stata forgiata anche dal mercato, che ci ha fatto credere, nel corso degli anni, che per avere maggiori prestazioni dobbiamo per forza aggiornare l'hardware.
Assolutamente falso!!
Quando le architetture erano chiuse (nel senso di non aggiornabili) i programmatori facevano i salti mortali per spremere fino all'ultimo Hz di potenza. Mi ricordo i primi giochi per il mio C16: inguardabili! Roba tipo quelle vecchissime pseudo-console anni '80 con le 2 racchette che facevano "ping... pong..." sul televisore di casa. Ma dopo qualche anno era tutta un'altra musica.
Stesso discorso per l'Amiga: all'inizio le applicazioni facevano schifo, poi erano una figata pazzesca! Ti ricordi il C64 che parlava? Io dico che nemmeno la Commodore, quando lo mise fuori nell'83 (l'anno è giusto? non ricordo) pensava che avrebbe mai parlato.
E potrei continuare per ore.


E bravo Leo, questo è lo spirito giusto.
Solo per ribadire il concetto: secondo voi, è possibile che un videogioco che esce oggi sul mercato per funzionare al 100% debba utilizzare una scheda video che ancora non esiste? (non ricordo il nome del game in questione ma ne avevo letto le caratteristiche in una recensione, in pratica la scheda video più potente disponibile permetteva l'utilizzo del 70% di tutte le opzioni)
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: hesadecimale >>>> decimale
« Risposta #12 il: 10 Giugno 2008, 18:21:33 »
beh il mercato è infame e bastardo...purtroppo non tutti sanno cosa può esserci nel cuore di un computer o di un software e allora ci si affida ai commessi o alle pubblicità che fanno di tutto per convincerti a comprare il computer più potente anche per navigare semplicemente....(esperienza personale)....
E' molto più conveniente farti spendere 500€ per una nuova consolle invece di sfruttare al massimo quella vacchia non pensi???

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: hesadecimale >>>> decimale
« Risposta #13 il: 10 Giugno 2008, 23:51:12 »
@pixel:
Sono ormai anni che sono su Linux ed il mondo Windows mi è del tutto alieno, per cui non sono ferrato su cosa ci succede. Però se ti riferisci a qualcosa di vecchio (informaticamente parlando), mi pare anche a me di ricordare che qualche anno fu rilasciato un gioco che aveva richieste talmente elevate che nessuno riusciva ad attivare tutti gli effetti e doveva correre a comprare l'ultimissima scheda se voleva vedere tutto attivo (mi viene da dire Doom III ma non ne sono sicurissimo).
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: hesadecimale >>>> decimale
« Risposta #14 il: 11 Giugno 2008, 17:19:11 »
Windoz a parte, tutt'ora i nuovi giochi mantengono la stessa logica, ovvero fatti per la futura scheda supermegaultra, ecc...

Un piccolo esempio,anche se minimo: ora stò lavorando su un eeepc (acquistato da poco, e per motivi di portabilità) che, nonostante sia basato su un processore a 900MHz, NON 3GHz e NON Dual-Core, ci gira tutto alla stessa velocità (se non a volte di più) del mio precedente portatile. Anche se ovviamente il disco è a stato solido (la vera novità), che spiegazioni diamo a questa cosa?

Sempre riguardo ai giochi, se nonm vado errato, la cosa che cambia è la definizione, mentre spesso e volentieri il motore è lo stesso di 10/15 anni fà (forse esagero gli anni, ma ripeto non sono un giocatore...).

Se invece parliamo di normali applicazioni, qual'è il motivo della necessità dirisorse sempre più elevate per fare più o meno (a volte meno) le stesse cose che si facevano 15/20 anni fà? Ma secondo voi, un normale gestionale (archiviazione a parte), che nei suoi elementi base non è strutturalmente cambiato (il commercio è sempre quello), perchè ha bisogno di un pc ultraveloce, altrimenti la grafica (alquanto inutile e spesso inguardabile oltre che ingestibile) non ci gira ?

Vabbè, discorso utopistico... meglio lasciar perdere...