@PeroPero

Есть 4 байта в них записана информация как их прочитать сразу?

так я считываю 2 байта и вывожу в 10-ричтной системе . Надо тоже самое только для 4 байт . И пояснить принцип. Или рассказать где можно об этом почитать !
char ch;
inp.get(ch);
unsigned short w = ch & 0xFF;
inp.get(ch);
w |= (ch & 0xFF) << 8;
cout << dec << (int)w << endl;
  • Вопрос задан
  • 641 просмотр
Пригласить эксперта
Ответы на вопрос 2
@xandox
#include <cstdint> // хэдр для uint32_t

std::uint32_t value; // переменная, гарантировано 4 байта
// предполагаю, что inp наследник std::istream
inp.read(reinterpret_cast<char*>(&value), sizeof(value)); //кастим наши 4 байта в char*-буфер, sizeof(value) == 4

std::cout << value; // ну и выводим, что получилось
Ответ написан
rhaport
@rhaport
val = 0;
for (int i = 0; i < 4; i++)
{
    unsigned char ch;
    // считываем один char из потока
    inp.get(ch);
    // (ch & 0xFF) - паранойя, так как ch не может быть больше чем 0xFF, 
    // можно смело опустить и оставить только ch
    // каждый unsigned char может иметь значения от 0 до 0xFF
    // сдвигаем каждый прочитанный символ но (8*i) позиций, то есть при первом чтении не сдвигаем, так как
    // i = 0, потом на 8, потом на 16, потом на 24
    // 8 - это длина битового представления чара,
    // 0xFF - это как раз 8 единичек
    // затем всё склеивается операцией or.
    // В итоге получится нечто вроде 0xDDCCBBAA
    // если 0xAA был первый чар, 0xBB - второй и т.д.
    // сдвигая на 8, мы гарантируем, что биты одного чара, не испортят биты другого чара 
    val |= ((ch & 0xFF) << (8*i)); 
}
cout << dec << val << endl;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы