Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Little endian [c]

  1. #1

    Little endian [c]

    Salve, non riesco a capire come funziona la seguente funzione che rende zero se il sistema è big endian o 1 se è little endin...

    codice:
    int endian ( void ) {
    	short magic, test; 
    	char * ptr;
    	magic =0xABCD; 
    	ptr = (char *) &magic; 
    	test = (ptr[1] << 8)  + (ptr[0]&0xFF); 
    	return (magic == test); 
    
    }
    A mio parere l'and bit a bit con 255 non serve a niente, in quanto rende il numero contenuto in ptr[0]... e perchè c'è bisogno dello shift di 8??
    per vedere se un sistema e little o big endian non basterebbe fare cosi ;

    codice:
    	short nuber = 89, test;  // valore che viene rapresentato in un solo byte 
    	char ptr *  = &number;
    
    	test = ptr[1];  // asegno il valore che è contenuto nella seconda parte del blocco di memmoria se il computer e little endian 
    	return ( test == number);

  2. #2
    Ciao Peppe,

    effettivamente è possibile scrivere versioni più compatte della funzione. Questo è un altro esempio:

    codice:
    typedef unsigned char  BYTE;
    typedef unsigned short WORD;
    
    typedef int            BOOL;
    
    #define TRUE           1
    #define FALSE          0
    
    BOOL IsLittleEndian()
    {
    	WORD wParola = 0x0001;
    	BYTE *b = (BYTE*)&wParola;
    
    	return (b[0] ? TRUE : FALSE);
    }
    
    int main()
    {
    	// Utilizziamo la funzione IsLittleEndian per verificare se
    	// la macchina nella quale gira questo programma adotta il
    	// formato little-endian o big-endian.
    	printf("Questa macchina adotta il formato %s-endian\n\n",
    			IsLittleEndian() ? "little" : "big");
    
    	return 0;
    }

  3. #3
    Scusa io non capisco una cosa...
    Se lo eseguo sul mio computer mi rende little endian, giustamente, ma nell'architetura little endian l'informazione non dovebbe essere memmorizata nella posizione ptr[1] e non in ptr[0], cioè prima i bit meno importanti!!!

  4. #4
    Nelle macchine little-endian, il numero 0x0001 che nelle macchine big-endian viene rappresentato così com'è scritto, nelle macchine little-endian viene rappresentato così: 0x1000.

    Un esempio, con spiegazioni dettagliate, lo trovi qui:

    http://en.wikipedia.org/wiki/Endianness

    Ciao

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.