2015-05-16 9 views
6

Domanda veloce: Poiché int è 2 byte e char è 1 byte, voglio memorizzare una variabile int in 2 variabili char. (come il bit 1 - 8 nel primo carattere, il bit 9-16 nel secondo carattere). Usare C come linguaggio di programmazione.Memorizza int in 2 caratteri

Come posso ottenere quello? Sarà qualcosa del tipo:

int i = 30543; 
char c1 = (char) i; 
char c2 = (char) (i>>8); 

fare il lavoro?

Non riesco a trovare se il lancio di un int in un carattere salterà solo i bit 9-16.

+6

Non è possibile garantire che 'int' è di due byte, tuttavia è possibile utilizzare' int16_t' da 'stdint.h' che è garantito per essere largo 2 byte . È una domanda interessante ma non penso che tu possa trovare una risposta specifica a 'char', ma se ci pensi, non ci sarà modo di memorizzare più di bit' CHAR_BIT' in un 'char', da qui il cast non è necessario –

+3

"int è due byte" solleva la domanda, quale compilatore stai usando? Int è spesso 32 bit, quindi 4 byte, in questi giorni, in ambienti a 32 e 64 bit. – hyde

+0

Non sono sicuro che sia installato sui PC universitari, ma i miei compagni mi hanno detto che sono due byte. Potresti anche usare int16_t, per essere sicuro al 100%, quindi grazie! –

risposta

4

Questa è stata estratta dal progetto c11 n1570

6.5.4 operatori Cast

  1. Se il valore dell'espressione è rappresentato con una portata maggiore o Precisione del necessario dal tipo indicato dal cast (6.3.1.8), quindi il cast specifica una conversione anche se il tipo di espressione è uguale al tipo denominato e rimuove qualsiasi intervallo extra e precisione .

Quindi il cast sarà infatti rimuovere i bit in più, ma non è necessario in ogni caso, perché il valore verrà convertito in modo implicito char, e quanto sopra si applicherebbe in ogni caso.

+0

Questo è tutto ciò di cui avevo bisogno, quindi quanto sopra dovrebbe funzionare. Grazie! –

0

Non vi resta che fare:

char c1 = (char) ((i << 8) >> 8); 

char c2 = (char) (i >> 8); 
Problemi correlati