преобразование старшего байта в младший - PullRequest
0 голосов
/ 22 октября 2019

У меня есть данные 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;
}

Просто хотел узнать, будет ли онпреобразовать значение "res" в little-endian?

1 Ответ

2 голосов
/ 22 октября 2019

Вы применяете ntohs() или htons() к одному байтовому значению (uint8_t), но эти функции (или макросы ) учитывают двухбайтовые значения.
В любом случае, применяя эти функции по одномупосле друг друга не будет меняться значение;Подумайте об этом в повседневной жизни, поменяйте местами два объекта и снова поменяйте их местами.

Если вы хотите рассматривать каждую пару байтов в 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]));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...