Como faço para converter entre valores big-endian e little-endian em C ++?

Como faço para converter entre valores big-endian e little-endian em C ++?

EDIT: para maior clareza, eu tenho que traduzir dados binários (valores de ponto flutuante de precisão dupla e inteiros de 32 bits e 64 bits) de uma arquitetura de CPU para outra. Isso não envolve rede, portanto funções ntoh () e similares não funcionarão aqui.

EDIT # 2: A resposta que eu aceitei aplica-se diretamente aos compiladores que estou mirando (e é por isso que eu escolhi isso). No entanto, existem outras respostas muito boas e mais portáteis aqui.

questionAnswers(27)

yourAnswerToTheQuestion