O que é uma maneira portátil de converter Byte-Order de seqüências de caracteres em C

Eu estou tentando escrever servidor que irá se comunicar com qualquer cliente padrão que pode fazer conexões de soquete (por exemplo, cliente de telnet)

Ele começou como um servidor de eco, que obviamente não precisava se preocupar com o pedido de bytes da rede.

Eu estou familiarizado com funções ntohs, ntohl, htons, htonl. Eles seriam ótimos sozinhos se eu estivesse transferindo ints de 16 ou 32 bits ou se os caracteres da string enviados fossem múltiplos de 2 ou 4 bytes.

Eu gostaria de criar uma função que opera em seqüências de caracteres como:

str_ntoh(char* net_str, char* host_str, int len)
{
    uint32_t* netp, hostp;
    netp = (uint32_t*)&net_str;
    for(i=0; i < len/4; i++){
         hostp[i] = ntoh(netp[i]);
    }
}

Ou algo semelhante. A coisa acima assume que o wordsize é de 32 bits. Não podemos ter certeza de que o tamanho da palavra na máquina de envio não é de 16 bits ou 64 bits, certo?

Para programas clientes, como telnet, eles devem estar usando hton * antes de enviarem e ntoh * após receberem os dados, correto?

EDIT: Para as pessoas que coisa porque 1-char é um byte que endian-ness não importa:

int main(void)
{
    uint32_t a = 0x01020304;
    char* c = (char*)&a;
printf("%x %x %x %x\n", c[0], c[1], c[2], c[3]);

}

Execute este trecho de código. A saída para mim é a seguinte:

$ ./a.out
  4 3 2 1

Aqueles em chipsets powerPC devem obter '1 2 3 4', mas aqueles de nós no chipset da Intel devem ver o que eu tenho acima na maior parte.

questionAnswers(4)

yourAnswerToTheQuestion