Я пытаюсь прочитать uint16_t из указателя потока u_char (который, как представляется, указывает на заголовок ip), но мне трудно получить рациональный результат.Чтение uint16_t из потока бит
Прямо сейчас, когда я бегу:
uint16_t len16 = *stream;
или когда я бегу следующий, в случае, если имеется несоответствие между сетевым и хост порядком байтов:
uint16_t len16 = *stream;
len16 = ntohs(len16);
я не получаю ожидаемый результат в uint16_t. Однако, когда я бегу:
uint8_t total_len1, total_len2;
uint16_t total_len;
//get length1
total_len1 = *stream;
//advance pointer
stream += sizeof(uint8_t);
//get length2
total_len2 = *stream;
//advance pointer
stream += sizeof(uint8_t);
Я получаю результаты я ожидаю в total_len1 и total_len2 в шестнадцатеричном формате. Итак, что здесь происходит и как я могу прочитать это значение непосредственно в uint16_t?
Спасибо, это имеет смысл. Есть ли способ сообщить компилятору о явной длине для u_char? Библиотека, которую я использую для получения потока, дает его как поток const u_char. – amoeba
Не знаю. Я думаю, что Microsoft Visual C++ может варьироваться от 8 до 16 в зависимости от того, как вы настроили свой проект на использование многобайтовых строк или нет. Вместо этого лучше используйте 'uint8_t', таким образом вы убедитесь, что используете 8-битную переменную. – Havenard