|
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
|
|
| 04.11.2020, 22:52 | |
|
Ответы с готовыми решениями:
12
Задано количество бит.как из него получить число
Самое большое Int32 число, в котором установлен нечетный бит и четный бит 0 |
|
Just Do It!
|
||
| 04.11.2020, 23:03 | ||
|
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
|
|
|
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
|
|
| 04.11.2020, 23:36 [ТС] | |
|
XLAT, Спасибо вам огромное вы мне глаза прямо раскрыли
![]() Добавлено через 18 минут XLAT, А вот e0 98 00 -- соответствует числу 3 168 тут не срастается
1
|
|
|
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 минут блок стал 01 05 0b 1c 0a 01 03
0
|
||
|
Just Do It!
|
|||
| 07.11.2020, 18:00 | |||
|
откуда там взялось 0b я хз читайте спецификацию дальше. по идее должно быть так: два байта на общие флаги + два байта на архивные. это как раз демонстрируется в спецификации. если спецификацию писали индусы с немодерированным творчеством, то тогда можно только угадывать.
0
|
|||
|
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
|
||
| 07.11.2020, 18:17 [ТС] | ||
|
XLAT,
Так 0x001с два байта а если не учитывать 0b то флаг получается 1 байт Информации мало либо я ее не правильно читаю
0
|
||
|
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
|
|
| 07.11.2020, 18:28 [ТС] | |
|
В старом формате флаги занимали один WORD
и выглядели как раз так как надо вот из старой спецификации HEAD_FLAGS 16 бит ( =2 байта) Флаги(*) блока но сдесь у нас 7ми битное число может в этом загвоздка? Добавлено через 4 минуты Я вообще не понимаю цель, хранения значений в такой форме.
0
|
|
|
|
|
| 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
|
|
| 12.11.2020, 18:51 | |
|
Помогаю со студенческими работами здесь
13
RC4 c размером блока 16-бит Координаты размером больше 32 бит
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый 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-динозавры, а новое поколение лёгких потоков. Откат?. . .
|