我正在接收来自网络的缓冲区,它是大端的,并且我在一个小的endian系统上。在我的系统上使用缓冲区之前,我是否必须反转缓冲区?我不确定endianness是否只反转单个类型的字节顺序,或者它是否也适用于整个缓冲区。
例如,假设我从网络接收到一个unsigned long的缓冲区,并且我在一个小小的endian系统上。守则如下:
for(int i=0;i<size;i++)
system_buffer[i]=ntohl(network_buffer[i]);在使用system_buffer之前,是否也必须将其反转(因此最后一个元素成为第一个元素,而visa相反)?
reverse_buffer(system_buffer);此外,如果我正在接收一个unsigned char的数组,我是否需要对endianness进行补偿,还是可以按原样使用缓冲区?
谢谢!
发布于 2014-02-27 17:00:21
恩迪内斯只适用于单变量,
即。只适用于每个数组元素值,而不是数组中元素的顺序。
而1字节变量不能颠倒其字节顺序,
所以没必要对他们做任何事。
发布于 2014-02-27 17:01:35
Endianness影响大小大于一个字节的整数的字节顺序(即它不影响一个字节或int8_t)。
您需要以整数的字节顺序读取协议说明。
发布于 2014-02-27 17:14:41
Endianness只影响数据字中字节(而不是位)的顺序。由于char的大小总是一个字节,所以您不必对它们进行任何调整。标准库函数ntohl将无符号整数(l)的字节顺序从网络字节顺序(n)更改为宿主字节顺序(h)。因此,在使用之前不需要反转缓冲区。只需更改缓冲区中每个元素的字节顺序即可。
for(int i = 0; i < size; i++) {
// network byte order to system byte order
system_buffer[i] = ntohl(network_buffer[i]);
}
// process system_bufferhttps://stackoverflow.com/questions/22075152
复制相似问题