Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C]mettere int in vettore unsigned char come hex

    sto scrivendo una applicazione client-server.
    le comunicazioni tra i due avvengono inviando "messaggi" composti da un vettore di unsigned char che vengono tutti interpretati o come serie di caratteri ( se vine inviato/ricevuto una stringa) oppure come dei valori interi,ma
    ho questo problema :

    -----------------
    int intero=3106;

    unsigned char caratteri[20];

    caratteri[5]=intero;
    -----------------

    che come capite NON funziona,perche'

    (dec)3106 = (hex)C22

    e ovviamente C22 NON ci sta in un solo unsigned char

    dovrei fare :
    caratteri[5]=0x0C
    caratteri[6]=0x22

    inoltre dato che devo inviare questi dati via tcp mi vedo costretto a doverli invertirli quindi :

    caratteri[5]=0x22
    caratteri[6]=0x0C


    avete suggerimenti per risolvere questo problema ?

  2. #2

    Re: [C]mettere int in vettore unsigned char come hex

    Originariamente inviato da honneamise
    sto scrivendo una applicazione client-server.
    le comunicazioni tra i due avvengono inviando "messaggi" composti da un vettore di unsigned char che vengono tutti interpretati o come serie di caratteri ( se vine inviato/ricevuto una stringa) oppure come dei valori interi,ma
    ho questo problema :

    -----------------
    int intero=3106;

    unsigned char caratteri[20];

    caratteri[5]=intero;
    -----------------

    che come capite NON funziona,perche'

    (dec)3106 = (hex)C22

    e ovviamente C22 NON ci sta in un solo unsigned char

    dovrei fare :
    caratteri[5]=0x0C
    caratteri[6]=0x22

    inoltre dato che devo inviare questi dati via tcp mi vedo costretto a doverli invertirli quindi :

    caratteri[5]=0x22
    caratteri[6]=0x0C


    avete suggerimenti per risolvere questo problema ?
    Non ho capito bene lo scenario,spiega meglio cosa devi fare per favore
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    dunque ho un vettore di unsigned char :

    unsigned char messaggio[20];

    questo vettore lo "riempio" per esempio con dei caratteri:

    messaggio[0]='c';
    messaggio[1]='i';
    messaggio[2]='a';
    messaggio[3]='o';

    oppure con dei valori in esadecimale (hex):

    messaggio[4]=0x01;
    messaggio[5]=0x02;
    messaggio[6]=0xAA;

    ora vorrei mettere in messaggio[7] il valore intero in base 10 3106 :

    int intero = 3106;//OK

    messaggio[7]=intero; //QUESTA COSA NON FUNZIONA !!!

    ed e' giusto che non funzioni, perche' il valore massimo che posso mettere in un unsigned char e' 0xFF , cioe' 255 .

    3106 in esadecimale e' : C22

    in pratica devo utilizzare sia messaggio[7] sia messaggio[8],cioe':

    messaggio[7]=0x0C;
    messaggio[8]=0x22;

  4. #4
    Originariamente inviato da honneamise
    dunque ho un vettore di unsigned char :

    unsigned char messaggio[20];

    questo vettore lo "riempio" per esempio con dei caratteri:

    messaggio[0]='c';
    messaggio[1]='i';
    messaggio[2]='a';
    messaggio[3]='o';

    oppure con dei valori in esadecimale (hex):

    messaggio[4]=0x01;
    messaggio[5]=0x02;
    messaggio[6]=0xAA;

    ora vorrei mettere in messaggio[7] il valore intero in base 10 3106 :

    int intero = 3106;//OK

    messaggio[7]=intero; //QUESTA COSA NON FUNZIONA !!!

    ed e' giusto che non funzioni, perche' il valore massimo che posso mettere in un unsigned char e' 0xFF , cioe' 255 .

    3106 in esadecimale e' : C22

    in pratica devo utilizzare sia messaggio[7] sia messaggio[8],cioe':

    messaggio[7]=0x0C;
    messaggio[8]=0x22;
    Si certo,in un solo carattere (1byte) non c'è modo di farci stare un intero (due byte,o anche di più in alcuni casi)quindi devi per forza utilizzare più posizioni del vettore esattamente come hai detto tu stesso,è per questo che non capisco dove sta il tuo problema.Nella distinzione tra un intero ed il successivo?Metti un carattere speciale di separazione...oppure qual'è?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    allora via "cast" nulla da fare a parte un warning su gcc ( visual manco se ne accorge ...)

    la soluzione "parziale e incompleta " che ho trovato e' usare lo shift come segue :

    packet_info[19]=(unsigned char)1233;
    packet_info[20]=(unsigned char)1233>>8;

    dovrei trovare ora una funzione che mi dica
    34 e' grosso 1 byte;
    1233 e' grosso 2 byte;

    K e' grosso N byte

    poi faccio un for del tipo:

    // X e' la posizione del vattore da cui partire a scrivere il valore intero
    for (i=0;i<N;i++)
    {
    vettore[ i + x]= valore_intero >> ( 8 * i ) ;
    }

    che ne dite ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Allora la funzione che ti dice quanti byte ...
    codice:
    int size(int number)
    {
        int s;
        for(s = 1; n > 256; n/=256, s++);
        return s;
    }
    Solo mi chiedo, come farà il tuo prog a sapere quanti caratteri deve leggere ? Siccome un integer sta in 4 byte esatti, forse ti conviene limitarti a dividerlo in 4 parti di 1 byte ...

  7. #7

    Re: [C]mettere int in vettore unsigned char come hex

    Originariamente inviato da honneamise
    sto scrivendo una applicazione client-server.
    le comunicazioni tra i due avvengono inviando "messaggi" composti da un vettore di unsigned char che vengono tutti interpretati o come serie di caratteri ( se vine inviato/ricevuto una stringa) oppure come dei valori interi,ma
    ho questo problema :

    -----------------
    int intero=3106;

    unsigned char caratteri[20];

    caratteri[5]=intero;
    -----------------

    che come capite NON funziona,perche'

    (dec)3106 = (hex)C22

    e ovviamente C22 NON ci sta in un solo unsigned char

    dovrei fare :
    caratteri[5]=0x0C
    caratteri[6]=0x22

    inoltre dato che devo inviare questi dati via tcp mi vedo costretto a doverli invertirli quindi :

    caratteri[5]=0x22
    caratteri[6]=0x0C


    avete suggerimenti per risolvere questo problema ?
    prova così..

    codice:
    caratteri [5] = intero % 256  //0x22
    caratteri [6] = intero / 256  //0x0C
    www.vape04.too.it - informatica, elettronica e tante altre cose.
    @LFEO§OFT GREEnOS

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.