Files
unisa_lab_reti_2013_2014/2.little_big_endian/check_architecture.c

68 lines
1.8 KiB
C

#include <stdio.h>
#include <stdlib.h>
typedef union {
short data_short;
char data_char[2];
} input_data;
int main (int index, char** data){
if (index >2 || index == 1){
fprintf(stdout,"More or less arguments expected\n");
exit(-1);
}else{
if ( *((*(data+1))+1) != 0 && *((*(data+1))+2) != 0 && *((*(data+1))+3) != 0 && *((*(data+1))+4) == 0){
input_data data_union;
input_data data_union_inverted;
for (int i = 0;i<4;i++){
if( ((*((*(data+1))+i) >= 48) && (*((*(data+1))+i) <=57) ) || ((*((*(data+1))+i) >= 97) && (*((*(data+1))+i) <=102) )){
continue;
}else{
fprintf(stdout,"Bad Formatted\n");
exit(-2);
}
}
char buf[3];
for (int i = 0;i<2;i++){
buf[0]= *((*(data+1))+(i*2));
buf[1]= *((*(data+1))+(i*2)+1);
buf[2]= 0;
sscanf (buf,"%hx",(short *)&(data_union.data_char[i]));
data_union_inverted.data_char[1-i] = data_union.data_char[i] ;
}
for (int i = 0;i<2;i++){
fprintf(stdout,"0x%02x\n",data_union.data_char[i]);
}
fprintf(stdout,"Big Endian %d\n",data_union.data_short);
fprintf(stdout,"Little Endian %d\n",data_union_inverted.data_short);
}else{
fprintf(stdout,"Bad Input Lenght\n");
}
}
return 0;
}