Получение целого числа с учетом его 4-байтового целого числа без знака в порядке байтов?(C ++) - PullRequest
2 голосов
/ 17 февраля 2011

Я, вероятно, здесь очень неправ, поэтому, пожалуйста, укажите на любые заблуждения или ошибки, которые у меня могут быть.

Входные данные для этого назначения представляют собой строку из нескольких символов, за которой следует последовательность 4-байтовых целых чисел без знака вМладшая форма.Я прочитал ввод в строку STL и использовал функцию подстроки, чтобы изолировать только целые числа в новую строку.

Насколько я понимаю, младшие значащие биты будут сохраняться, начиная с самого левого байта.Целое число без знака 131071 (dec), двоичное представление которого (0000 0000 0000 0001 1111 1111 1111 1111) будет затем сохранено как 1111 1111 1111 1111 0000 0001 0000 0000

Разбор этой новой строки 4 байта за раз,Я думал, что первый байт будет содержать биты для значений 0-255, 2-й байт для 256-65535 и т. Д. Для 3-го и 4-го байтов.

Я взял 1-й байт, преобразовал его в целое число без знака,и затем сместил его на 24 бита, я сделал то же самое для 2-го и 3-го байтов, за исключением 16 и 8-битных сдвигов соответственно.

Я получил 255 и 65535 для 1-го и 2-го байтов, как ожидалось, но 0 для3-й байт.Я считаю, что где-то должен использовать оператор &, но я не могу понять, где.Если бы кто-нибудь мог дать мне какой-нибудь совет или, возможно, менее глупый способ выполнить ту же задачу, я был бы очень признателен.

1 Ответ

3 голосов
/ 17 февраля 2011

Если вы получили 0 за 3-й байт, и ваши данные соответствуют вашему описанию, в вашем коде есть ошибка. Приведенный ниже код будет правильно преобразовывать ваши образцы данных.

// Data from file
unsigned char Buffer[] = { 255, 255, 1, 0 };

// Convert the LSB data to an unsigned int
unsigned int Result = 0;
for (int i = 0; i < 4; ++i) {
  Result |= static_cast<unsigned int>(Buffer[i]) << (i*8);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...