Little Endian - Problema de Big Endian

Little Endian vs Big Endian

Big Endian = 0x31014950
Little Endian = 0x50490131

Sin embargo, utilizando este método

inline unsigned int endian_swap(unsigned int& x)  
{
return ( ( (x & 0x000000FF) << 24 ) | 
         ( (x & 0x0000FF00) << 8  ) |
         ( (x & 0x00FF0000) >> 8  ) |
         ( (x & 0xFF000000) >> 24 ) );
}

resultado = 0x54110131
Pasé mucho tiempo probando muchos métodos similares e incluso una biblioteca como

unsigned long _byteswap_ulong(unsigned long value);  

Pero aun así no hubo suerte ... todo devuelve el mismo resultado

EDITAR
Estoy trabajando en el sistema Little-Endian con Microsoft Visual Studio 2008
el ejemplo como sigue

int main()
{
    unsigned int y = 0x31014950;
    unsigned int r = endian_swap( y );
    std::cout << r;
}  

el ejemplo publicado en Ideone.com es correcto ... pero no funciona conmigo

EDITAR

std::cout << std::hex << r;  

De cualquier manera, Pals ... Hex o no, no está obteniendo el número correcto ... O Visual Studio tiene un error grave en su depurador o en toda mi máquina ...
Porque reemplacé todo el código con un código Redunant más lento pero aún obteniendo los mismos resultados
Por cierto, si hace alguna diferencia ... estoy usando Debugger para romper después de la función para verificar el resultado

Respuestas a la pregunta(7)

Su respuesta a la pregunta