C 将作为结构一部分的数组的大端值转换为小端值

C 将作为结构一部分的数组的大端值转换为小端值,c,arrays,C,Arrays,我有一个包含以下两个要素的结构: _HEADER tHeader; uint8_t abData[DATA_SIZE]; 正如您所看到的,它有一个标题,其中充满了uint数字和一个带有大小数据的数组 我想在某个项目中发送此数组,该项目不需要对问题和问题进行描述。目的地需要abData[DATA_SIZE]的小尾数,但它是bigendian。。标题不重要-它是正确的 我是C语言的新手,所以我不知道如何转换:/谷歌搜索更让人困惑,所以也许你可以给我一个如何

我有一个包含以下两个要素的结构:

_HEADER  tHeader;                   
uint8_t  abData[DATA_SIZE];
正如您所看到的,它有一个标题,其中充满了uint数字和一个带有大小数据的数组

我想在某个项目中发送此数组,该项目不需要对问题和问题进行描述。目的地需要abData[DATA_SIZE]的小尾数,但它是bigendian。。标题不重要-它是正确的


我是C语言的新手,所以我不知道如何转换:/谷歌搜索更让人困惑,所以也许你可以给我一个如何理解的线索!是否有一个简短的函数可用于转换此数组?数组中的数据是从仅包含UINT的结构中复制的。。。因此,也许我可以在复制之前更改结构,或者您将如何处理它?

第一件事是,如果endianess是相关的,那么abData实际上应该是一个uint数组。接下来,您应该在发送数据之前或接收数据之后交换endianess。但它不是一个uint数组吗?这是唯一的,我错了吗?我不能改变数据的类型,它是固定的,你会在之前或之后做什么?你会怎么做?感谢您的快速回复,一个字节内的位总是以相同的顺序存储。机器端性改变了多字节数据元素中字节的存储方式。因此,一个小的端点254和一个大的端点一样是0xFE。然而,一个小的端点256是0x00,0x01,而一个大的端点是0x01,0x00。这就是我相信chmikes评论的原因——他说数组应该是uint16而不是uint8,因为uint16消耗超过1字节的存储空间,所以它们也可能受到endianess变化的影响。将其设为uint16数组,然后按正确的预期顺序传递int的每个字节。您没有指定值是16位还是32位。数据可能以网络字节顺序bigendian编码,因此需要将其转换为主机字节顺序littleendian。要执行此操作,必须根据要进行字节交换的值的大小使用ntohsuint16_t函数或ntohluint32_t函数。@chmike ntoh不一定有用。它的远端是小端,不一定是主机。不管怎么说,如果abData真的是唯一的,那么endianness就无关紧要了。