繁体   English   中英

小尾数字节顺序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM