将大字节序转换为小字节序

时间:2019-10-22 05:39:57

标签: c networking

我有一个wireshark数据,其输出看起来像这样:“ c1 c1 31 ad 1f ...”。 我存储的这些值是一个数组

unit8_t array[10]={0xc1,0xc1,0x31,0xad,0x1f...}

现在,我想将此数组转换为小端格式,并存储在其他数组中:

//Sample code to convert to little endian

for(i = 0;i<32;i++)
{
        uint8_t res = ntohs(htons(array[i]));// converting element to little endian
        plain_text_little_endian[i] = res;
}

只想知道,它将转换为“ li”的小尾数吗?

1 个答案:

答案 0 :(得分:2)

您将ntohs()htons()应用于单个字节值(uint8_t),但是这些 函数(或 macros )考虑两个字节的值。
无论如何,一个接一个地应用这些功能不会改变该值。想一想在日常生活中,您交换两个对象,然后再次交换它们。

如果您想将array中的每对字节视为一个16位整数 按照大端顺序并以主机顺序存储它们,也许应该 你试试这个:

uint8_t array[10]={...};
uint16_t output[5];
for(int i=0; i<5; ++i)
{
  output[i]=(uint16_t)((array[2*i+1]<<8)|array[2*i+0]));
}