Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- /*
- * "Endianness" es el orden o secuencia de bytes de una palabra de datos digitales en la memoria de la computadora.
- * El "endianismo" se expresa principalmente como big-endian (BE) o little-endian (LE).
- * Una arquitectura big-endian almacena el byte más significativo de una PALABRA W (16bits) en la dirección de memoria más pequeña
- * y el byte menos significativo en la más grande .
- * Una arquitectura "little-endian", por el contrario, almacena el byte menos significativo en la dirección más pequeña.
- * "Endianness" también se puede utilizar para describir el orden en el que se transmiten los bits a través de un canal de comunicación,
- * por ejemplo, big-endian en un canal de comunicaciones transmite primero los bits más significativos.
- */
- //Invierte la palabra segun la arguitectura
- unsigned short swap (unsigned short word)
- {
- unsigned char endianTest[2] = {0,1};//Guarda dos bytes (uchar) [0]=0x00,[1]=0x01 , como palabra seria 0x0001 =1d
- printf ("Como se ve EL TEST endianness = 0x%04X = %d \n", *(short*) endianTest,*(short*) endianTest);
- //La palabra es mayor de 0xFF=255 ? Si es asi la parte inferior ha sido guardada en la superior
- if (*(short*)endianTest==256)//Miro la palabra si ha sido guardada como 0x0100=256 la invierto
- {
- printf ("Esta invertida !\n");
- //WORD(16bits)=HIGH(8bits)+LOW(8bits)
- unsigned char high,low;//Declaro dos bytes (8bits) ambos forman la palabra W de 16 bits
- high = (word >> 8 )& 0xff;//La parte alta HIGH la traslado a la parte baja LOW de la palabra. >>8
- printf (" H = 0x%02X ",high);
- low = word & 0xff;//Recupero la parte inferior de la palabra LOW
- printf (" L = 0x%02X ",low);
- printf (" W=0x%04X \n",(low << 8) | high);
- return ((low << 8) | high );//Junto los dos bytes(8bits) y retorno una palabra de 16bits
- }
- printf ("No Esta invertida !\n");
- return (word);//No ha sido invertida, no es mayor a 0xFF (255) se devuelve tal cual
- }
- int main(){
- unsigned short palabra=0x0001;//p.e una palabra de 16bits que contiene 0x0001=1d , H=0x00 + L=0x001
- printf ("Palabra de test =0x%04X \n",palabra);
- printf ("Palabra de test RESULTADO = 0x%04X",swap (palabra));//Envio 1 en decimal en una palabra de 16bits
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement