С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502

Получить число размером в 7 бит

04.11.2020, 22:52. Показов 2426. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет ребята. Возникла у меня задачка, извлечь данные из архива.
Загвоздка в том, что он использует некую специфическую форму записи данных.
Вот цитата из документации..

vint
Целое число переменной длины. Может включать в себя один или несколько байтов, где ниже 7 бит каждого байта содержат целочисленные данные и самый старший бит в каждом байте это флаг продолжения. Если самый старший бит равен 0, то это последний байт в последовательности. Таким образом первый байт содержит 7 наименее значимых битов целого числа и флаг продолжения. Второй байт, если он присутствует, содержит следующие 7 бит и так далее.

Просмотрел что он пишет в hex редакторе и тут начинается веселье
92 01 -- соответствует числу 146 ну да 0x92 = 146 единица видимо флаг конца??
ea 01 -- соответствует числу 234 совпадает
a2 00 -- соответствует числу 34 ! Попробовал обнулить старший бит
temp &= ~(1 << 7); получаем 34 по некой причине число 34 понадобилось писать таким образом (зачем непонятно)
ведь в первых двух случаях совсем по другому.
bc 00 -- соответствует числу 60. Обнуляем старший бит, вроде подходит.
e0 98 00 -- соответствует числу 3 168 !! Тут идеи у меня закончились.
94 03 -- соответствует числу 404
a9 06 -- соответствует числу 809
Кто хорошо знает битовые операции подскажите, что он делает с числами?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2020, 22:52
Ответы с готовыми решениями:

Задано количество бит.как из него получить число
По условиям лабораторной работы нужно вводить число бит (например 512) и генерировать на основе него простое число. подскажите каким...

Число размером 128 бит
Бьюсь над реализацией алгоритма IDEA. Исходников на C# найти не удалось. Необходимо задать ключ размером 128 бит и потом его циклически...

Самое большое Int32 число, в котором установлен нечетный бит и четный бит 0
после конвертации получается число 1431655765 это верно? бинарное отображение 1010101010101010101010101010101 я думал непарный...

12
Just Do It!
 Аватар для XLAT
4201 / 2656 / 654
Регистрация: 23.09.2014
Сообщений: 8,950
Записей в блоге: 3
04.11.2020, 23:03
Цитата Сообщение от zombivadim Посмотреть сообщение
92 01 -- соответствует числу 146 ну да 0x92 = 146 единица видимо флаг конца??
Флаг конца продолжения = 128(в десятичной) или 0x80 в шестнадцатиричной
0x92 минус 0x80(убираем флаг, но помним, что будет ещё число) = 0x12 это младший разряд.
01 'это старший разряд = 0x80

Итого:
0x12 + 0x80 = 0x92 или в десятичной системе = 146
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
04.11.2020, 23:07  [ТС]
XLAT,
Спасибо а в случае a9 06 ?? или e0 98 00
0
Just Do It!
 Аватар для XLAT
4201 / 2656 / 654
Регистрация: 23.09.2014
Сообщений: 8,950
Записей в блоге: 3
04.11.2020, 23:09
Лучший ответ Сообщение было отмечено zombivadim как решение

Решение

Цитата Сообщение от zombivadim Посмотреть сообщение
Спасибо а в случае a9 06 ??
a9-80 = 29;
29 + (6 * 80) = 329 ваш результат в гексе
или 809 в десятичной
1
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
04.11.2020, 23:36  [ТС]
XLAT, Спасибо вам огромное вы мне глаза прямо раскрыли

Добавлено через 18 минут
XLAT,
А вот
e0 98 00 -- соответствует числу 3 168
тут не срастается
1
Just Do It!
 Аватар для XLAT
4201 / 2656 / 654
Регистрация: 23.09.2014
Сообщений: 8,950
Записей в блоге: 3
04.11.2020, 23:48
Цитата Сообщение от zombivadim Посмотреть сообщение
тут не срастается
срастается:
Code
1
2
3
e0     98      00
e0-80  98-80   00
60   + 18*80 + 0  = C60(hex) = 3168(dec)
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
07.11.2020, 16:14  [ТС]
XLAT,
С размерами я разобрался, все работает, но запнулся на битовых флагах. Они тоже тип vint.
Проблема в том что формат записи флагов в блоке выглядит примерно так

01 05 07 00 06 01 01

где 01 тип блока в данном случае главный заголовок.
Далее по спецификации идут общие флаги
Flags common for all headers:
0x0001 Extra area is present in the end of header.
0x0002 Data area is present in the end of header.
0x0004 Blocks with unknown type and this flag must be skipped when updating an archive.
0x0008 Data area is continuing from previous volume.
0x0010 Data area is continuing in next volume.
0x0020 Block depends on preceding file block.
0x0040 Preserve a child block if host block is modified
далее архивные флаги
0x0001 Volume. Archive is a part of multivolume set.
0x0002 Volume number field is present. This flag is present in all volumes except first.
0x0004 Solid archive.
0x0008 Recovery record is present.
0x0010 Locked archive

Пробуем включить опцию Solid при создании архива
блок изменился и стал

01 05 07 04 06 01 01 -- 0x0004 Solid archive. Почему 0004 Это 2х байтовое значение??
Если это vint то прочитав первое число, продолжения нет.
Далее интереснее пробуем поставить три флага 0x0004 Solid archive,Recovery record is present,Locked archive.
блок стал

01 05 0b 18 0a 01 03 -- 18 0a почему меняется два байта??
Я явно не правильно понимаю как читать флаги.

Добавлено через 10 минут
Цитата Сообщение от zombivadim Посмотреть сообщение
01 05 0b 18 0a 01 03
ошибочка
блок стал

01 05 0b 1c 0a 01 03
0
Just Do It!
 Аватар для XLAT
4201 / 2656 / 654
Регистрация: 23.09.2014
Сообщений: 8,950
Записей в блоге: 3
07.11.2020, 18:00
Цитата Сообщение от zombivadim Посмотреть сообщение
пробуем поставить три флага 0x0004 Solid archive,Recovery record is present,Locked archive.
Цитата Сообщение от zombivadim Посмотреть сообщение
0x0004 Solid archive.
0x0008 Recovery record is present.
0x0010 Locked archive
0x0004 + 0x0008 + 0x0010 = 0x001с
откуда там взялось 0b я хз

читайте спецификацию дальше.

по идее должно быть так:
два байта на общие флаги +
два байта на архивные.

это как раз демонстрируется в спецификации.

если спецификацию писали индусы с немодерированным творчеством, то тогда можно только угадывать.
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
07.11.2020, 18:17  [ТС]
XLAT,
Так 0x001с два байта
а если не учитывать 0b то флаг получается 1 байт
Цитата Сообщение от XLAT Посмотреть сообщение
читайте спецификацию дальше.
К сожалению вся спецификация это небольшой обобщенный текст.
Информации мало либо я ее не правильно читаю
0
Just Do It!
 Аватар для XLAT
4201 / 2656 / 654
Регистрация: 23.09.2014
Сообщений: 8,950
Записей в блоге: 3
07.11.2020, 18:22
Цитата Сообщение от zombivadim Посмотреть сообщение
К сожалению вся спецификация это небольшой обобщенный текст.
мне не известно насколько там у вас всё серьезно и какие цели,
если не очень, то перепишите энту спецификацию в логически более полно-осмысленный вариант.
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
07.11.2020, 18:28  [ТС]
В старом формате флаги занимали один WORD
и выглядели как раз так как надо
вот из старой спецификации
HEAD_FLAGS 16 бит ( =2 байта) Флаги(*) блока
но сдесь у нас 7ми битное число может в этом загвоздка?

Добавлено через 4 минуты
Я вообще не понимаю цель, хранения значений в такой форме.
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
08.11.2020, 01:11
ха! хм... Пример архива и всю документацию увидеть где можно?
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
12.11.2020, 18:51  [ТС]
GoodWeather, https://www.rarlab.com/technote.htm
Архив можете сами сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2020, 18:51
Помогаю со студенческими работами здесь

Получить квадратную матрицу A размером N на N (N – случайное число от 4 до 9)
Всем салам! помогите решить задачку Получить квадратную матрицу A размером N на N (N – случайное число от 4 до 9) вида: ...

Получить квадратную матрицу A размером NxN (N – случайное число от 7 до 10)
Вообще не понимаю как сделать( помогите пожалуйста! язык программирования Visual basic Получить квадратную матрицу A размером NxN (N –...

RC4 c размером блока 16-бит
Была написана программа на питоне, с алгоритмом RC4, где блок 8 бит. import timeit data = str(input(&quot;Vvedite text:&quot;)) ...

Координаты размером больше 32 бит
Здравствуйте. Подскажите в каком направлении смотреть. Нужно отобразить график из массива, левой кнопкой мыши увеоичивать выделенную...

Из заданного одномерного массива A размером N получить квадратную матрицу B размером M х M
Помогите Из заданного одномерного массива A размером N получить квадрат- ную матрицу B размером M х M таким образом, чтобы ее размер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru