Little Endian - Problema do Big Endian

Little Endian vs Big Endian

Big Endian = 0x31014950
Little Endian = 0x50490131

No entanto, usando 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
passei muito tempo tentando vários métodos semelhantes e até uma biblioteca como a

unsigned long _byteswap_ulong(unsigned long value);  

Mas ainda sem sorte .. tudo retorna o mesmo resultado

EDITAR
Estou trabalhando no sistema Little-Endian com o Microsoft Visual Studio 2008
o exemplo como segue

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

o exemplo postado no Ideone.com está correto .. mas não funciona comigo

EDITAR

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

De qualquer maneira, amigos .. Hex ou não, não está obtendo o número certo. O Visual Studio teve um erro sério no depurador ou na minha máquina inteira.
Porque eu substituí o código inteiro por um código redundante mais lento, mas ainda obtendo os mesmos resultados
BTW se isso faz alguma diferença .. eu estou usando o Debugger para quebrar após a função para verificar o resultado

questionAnswers(7)

yourAnswerToTheQuestion