小端字节顺序

时间:2014-01-08 21:01:46

标签: c sockets tcp endianness

我不断通过TCP / IP连接从LabVIEW向C程序发送像素值数组。 C程序接收一个字节流,所以我使用以下代码将字节转换为uint32,以打印数组中的所有像素值。在这种情况下,有谁知道如何将字节顺序切换为little-endian?:

WSADATA wsa;
SOCKET s , new_socket;
struct sockaddr_in server , client;
int c;
int iResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
typedef unsigned int uint32_t;
unsigned int i;
size_t len;
uint32_t* p;
uint32_t* endp;
uint32_t value;

p = (uint32_t*)((void*)recvbuf);

do
{
    iResult = recv(new_socket, recvbuf, recvbuflen, 0);
    len = iResult/sizeof(uint32_t);

    for(i=0; i < len; i++)
    {
    value = p[i];
    }   
    printf("%d\n", value);  
} 
while ( iResult > 0 );

    closesocket(new_socket);
    WSACleanup();

    return 0;
}

2 个答案:

答案 0 :(得分:1)

在发送之前使用htonl()将32位整数从主机字节顺序转换为网络字节顺序,并使用ntohl()将32位整数从网络字节顺序转换为主机字节顺序收到后。对于16位整数,还有htons()ntohs()。让函数决定如何为您转换值。在小端系统上,实现这些功能以执行实际转换。在大端系统上,这些功能实现为无操作。

答案 1 :(得分:0)

使用宏/函数族http://linux.die.net/man/3/ntohs通过网络发送数据。那你根本不会有任何问题。