我不断通过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;
}
答案 0 :(得分:1)
在发送之前使用htonl()
将32位整数从主机字节顺序转换为网络字节顺序,并使用ntohl()
将32位整数从网络字节顺序转换为主机字节顺序收到后。对于16位整数,还有htons()
和ntohs()
。让函数决定如何为您转换值。在小端系统上,实现这些功能以执行实际转换。在大端系统上,这些功能实现为无操作。
答案 1 :(得分:0)
使用宏/函数族http://linux.die.net/man/3/ntohs通过网络发送数据。那你根本不会有任何问题。