Gremlin92
@Gremlin92
Целеустремленный

Как склеить байты правильно?

Читаю файл, дошел до того что надо как то склеить 4 байта раздельных в одно десятичное число, потом 3 байта в число и 2 байта в число, в коде ниже 4 байта в одно число - но что-то мне подсказывает что число слишком большое получается, видимо не правильно делаю.
#include <iostream>

int main()
{
    char a = 0x05, b = 0x00,c=0xA1,d=0x04;
    unsigned int res = a<<24|b<<16|c<<8|d;
    std::cout << res<<std::endl;
}
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
char ... c=0xA1

здесь нужно использовать unsigned char, иначе после знакового расширения получишь гарантированно отрицательный результат

Как склеить байты правильно?

чтобы склеить байты правильно, нужно знать, какой порядок байт принят в этом файле. См. big endian, little endian.
Ответ написан
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Это нормальнгый способ склеить 4 байта. Почему вы считате, что число слишком большое получается? Что вам не нравится в вводе?

Единственный возможный косяк в порядке байт. Может, они в файле записаны от младшего к старшему. Тогда вам при склейке надо a,b,c,d в обратном порядке использовать.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы