首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >endianness反转数组了吗?

endianness反转数组了吗?
EN

Stack Overflow用户
提问于 2014-02-27 16:56:39
回答 3查看 1.5K关注 0票数 2

我正在接收来自网络的缓冲区,它是大端的,并且我在一个小的endian系统上。在我的系统上使用缓冲区之前,我是否必须反转缓冲区?我不确定endianness是否只反转单个类型的字节顺序,或者它是否也适用于整个缓冲区。

例如,假设我从网络接收到一个unsigned long的缓冲区,并且我在一个小小的endian系统上。守则如下:

代码语言:javascript
复制
for(int i=0;i<size;i++)
    system_buffer[i]=ntohl(network_buffer[i]);

在使用system_buffer之前,是否也必须将其反转(因此最后一个元素成为第一个元素,而visa相反)?

代码语言:javascript
复制
reverse_buffer(system_buffer);

此外,如果我正在接收一个unsigned char的数组,我是否需要对endianness进行补偿,还是可以按原样使用缓冲区?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-27 17:00:21

恩迪内斯只适用于单变量,

即。只适用于每个数组元素值,而不是数组中元素的顺序。

而1字节变量不能颠倒其字节顺序,

所以没必要对他们做任何事。

票数 4
EN

Stack Overflow用户

发布于 2014-02-27 17:01:35

Endianness影响大小大于一个字节的整数的字节顺序(即它不影响一个字节或int8_t)。

您需要以整数的字节顺序读取协议说明。

票数 1
EN

Stack Overflow用户

发布于 2014-02-27 17:14:41

Endianness只影响数据字中字节(而不是位)的顺序。由于char的大小总是一个字节,所以您不必对它们进行任何调整。标准库函数ntohl将无符号整数(l)的字节顺序从网络字节顺序(n)更改为宿主字节顺序(h)。因此,在使用之前不需要反转缓冲区。只需更改缓冲区中每个元素的字节顺序即可。

代码语言:javascript
复制
for(int i = 0; i < size; i++) {
    // network byte order to system byte order

    system_buffer[i] = ntohl(network_buffer[i]);
}

// process system_buffer
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22075152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档