[英]Little-endian byte order
我不断通过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;
}
发送之前,使用htonl()
将32位整数从主机字节顺序转换为网络字节顺序,并使用ntohl()
将接收到的32位整数从网络字节顺序转换为主机字节顺序。 还有用于16位整数的htons()
和ntohs()
。 让函数决定如何为您转换值。 在little endian系统上,实现了函数以执行实际的转换。 在大型字节序系统上,功能被实现为无操作。
使用宏/函数系列http://linux.die.net/man/3/ntohs通过网络发送数据。 这样您将完全没有任何问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.