Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    225

    [char, Hex in C]

    Salve,
    ho questa stringa: "L4TON"
    Tale stringa corrisponde al valore esadecimale: 00411138

    So che in C ad ogni carattare è associato un byte in memoria.
    La mia domanda è questa:
    Come faccio a capire se la stringa è effettivamente quel valore esadecimale??

    Grazie

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    :master: forse così:

    codice:
    #include <stdio.h>
    
    int main() {
    	char* str = "L4TON";
    
    	printf("%x\n", str);
    
    	return 0;
    }
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Questo credo che sia impossibile (printf() si aspetta un numero...non un puntatore)

    Puoi fare un ciclo e scrivere il codice carattere per carattere con printf()e dovrebbe andare...

    Nota:
    Con una stringa di 5 caratteri non dovresti avere 10 caratteri esadecimali (1 byte = 256 = 16*16 = 2 cifre hex) ?
    E con L4TON come la metti?
    L non è sicuramente 00...

    boh
    I've got a bike. You can ride it if you like.

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    il C non si aspetta niente, puoi trattare qualsiasi dato come vuoi.
    Facendo il cast in intero cmq il risultato non cambia.

    Inoltre non ho capito come si fa a convertire una stringa in esadecimale... prendiamo "Ciao", si calcola il decimale di c, i, a, o poi? ho 4 interi decimali, li sommo e poi converto?

    Giusto per curiosità, a me dice 420020 per L4TON, risulta anche a voi?

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    225

    [char, Hex in C]

    come fa ad uscire 420020 per L4TON???
    come'è il procedimento?

  6. #6
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Originariamente inviato da netarrow
    il C non si aspetta niente, puoi trattare qualsiasi dato come vuoi.
    Facendo il cast in intero cmq il risultato non cambia.

    Inoltre non ho capito come si fa a convertire una stringa in esadecimale... prendiamo "Ciao", si calcola il decimale di c, i, a, o poi? ho 4 interi decimali, li sommo e poi converto?

    Giusto per curiosità, a me dice 420020 per L4TON, risulta anche a voi?

    codice:
    Sommando i 4 interi daresti luogo a delle ambiguità!
    Esempio: 
    CAB = 67 + 65 + 66 = 198
    ADA = 65 + 68 + 65 = 198!!
    
    Per evitare queste ambiguità bisognerebbe "unire" semplicemente i codici esadecimali!
    Esempio:
    CIAO = 0x43; 0x49; 0x41; 0x4F
    codice(CIAO) = 0x4349414F
    che si ottiene facendo:
    0x43 * 0x1000000 + 0x49 * 0x10000 + 0x41 * 0x100 + 0x4F * 0x1 = 
    0x43000000 + 
      0x490000 + 
        0x4100 + 
          0x4F =
    0x4349434F;
    Quindi numero lettere = numero cifre esadecimali / 2

    Almeno secondo me...
    I've got a bike. You can ride it if you like.

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da edriv
    codice:
    Sommando i 4 interi daresti luogo a delle ambiguità!
    Esempio: 
    CAB = 67 + 65 + 66 = 198
    ADA = 65 + 68 + 65 = 198!!
    
    Per evitare queste ambiguità bisognerebbe "unire" semplicemente i codici esadecimali!
    Esempio:
    CIAO = 0x43; 0x49; 0x41; 0x4F
    codice(CIAO) = 0x4349414F
    che si ottiene facendo:
    0x43 * 0x1000000 + 0x49 * 0x10000 + 0x41 * 0x100 + 0x4F * 0x1 = 
    0x43000000 + 
      0x490000 + 
        0x4100 + 
          0x4F =
    0x4349434F;
    Quindi numero lettere = numero cifre esadecimali / 2

    Almeno secondo me...
    si potrebbe essere così... aspettaimo nemo74na che confermi.

    come fa ad uscire 420020 per L4TON???
    come'è il procedimento?
    non ho fatto un procedimento, ho fatto un cast in int e ho stampato il nu8mero in formato esedecimale con %x, sarà snbagliato, la proposta di endrive mi sembra la più logica.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Logico. Infatti:
    1 cifra esadecimale = 1 nibble.
    1 lettera = 1 byte = 2 nibbles.

    Comunque, per la conversione, una funzione in pseudo-codice:
    codice:
    string ToHex(int Dec)
    {
       string hex;
       int cifra;
    
       while (Dec > 0)
       {
          cifra = Dec % 16;
          
          if (cifra < 10) hex = (char)(48 + cifra) + hex;
          else hex = (char)(55 + cifra) + hex;
    
          Dec = Dec / 16;
       }
    
       return hex;
    }
    Dato il valore decimale del carattere ascii da te cercato (dovrebbe bastare un semplice cast a int) questa funzione ti tira fuori il valore esadecimale a 2 cifre che lo rappresenta.

    P.S. Questa è una funzione fatta apposta, forse (di sicuro) il C ha già qualche funzione predisposta.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    225

    [char Hex C]

    E se avessi la stringa "L4TON" con le virgolette?
    Come la mettiamo?

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    In che senso "come la mettiamo" ? Le virgolette sono anch'esse dei caratteri ascii e come tali si possono trasformare in int e dare in pasto ad una funzione come quella che ho scritto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.