A function to handle multiple datatypes

@pico, your code only is aliased by a char type, which is what the standard says is acceptable for aliasing, therefore it has not subverted type safety, nor done any evil casts.

@all who are interested,
There are some important differences with types that I may not have made clear in my post earlier on ( here ).
When attempting to interpret data differently ( other than char ); the thing you have to remember is char is the only type you can cast to safely ( unless casting operators for the appropriate types are implemented into user defined types. Does not apply to primitive/built-in types like 'int' ). In my earlier post I had this example below.

void PrintIntFromStream( void *v_Stream ){
  int *i_StreamPtr = ( int* ) v_Stream;
  Serial.print( "Int aliased from stream: " );
  Serial.println( *i_StreamPtr  );
  return;
}

The difference being here is i_StreamPtr is aliasing void* with a non compatible type ( int ).
Also a few commonly accepted usages ( that are wrong ):

//Not just void* but any incompatible types.
uint32_t u_Value32 = 0x00ABCD00;
uint16_t u_Value16 = *( uint16_t* ) u_Value32;

//And the incompatible types reversed.
uint16_t u_Array[] = { 0xBAD, 0xF00D, 0x00 };
uint32_t u_Int32 = * ( uint32_t* )  u_Array;

These are all examples of the strict aliasing rule being broken. Which is why casts are evil, in particular void* as it always masks the original type of the incoming data. This is fundamentally why C++ constructs are far better for this job, especially templates; as with the template definition, you are always provided with a 'known' type.