Skip navigation

Tag Archives: big-endian

This solution is for the book I am currently reading. All of my notes and solutions are available at Google Code.

Here is my work for problem 2.5:

#include <stdio.h>

typedef unsigned char *byte_pointer;

void show_bytes( byte_pointer start, int len ) {
  int i;
  for ( i = 0; i < len; i++ ) {
    printf( " %.2x", start[ i ] );
  }
  printf( "\n" );
}


void show_int ( int x ) {
  show_bytes( ( byte_pointer ) &x, sizeof( int ) );
}

void show_float ( float x ) {
  show_bytes( ( byte_pointer ) &x, sizeof( float )  );
}

void show_pointer ( void *x ) {
  show_bytes( ( byte_pointer ) &x, sizeof( void * ) );
}

void test_show_bytes ( int val ) {
  int ival = val;
  float fval = ( float ) ival;
  int *pval = &ival;
  show_int( ival );
  show_float( fval );
  show_pointer( pval );
}

Problem:

Consider the following three calls to show_bytes:

int val = 0x12345678;
byte_pointer valp  = (byte_pointer) &val;
show_bytes( valp, 1 ); /* A. */
show_bytes( valp, 2 ); /* B. */
show_bytes( valp, 3 ); /* C. */

Indicate which of the following values would be printed by each call on a little-endian machine and on a big-endian machine.

Little-endian:

A. 78
B. 78 56
C. 78 56 34

Big-endian:

A. 12
B. 12 34
C. 12 34 56