Имя: Пароль:
IT
 
Помогите файл расшифровать
0 RomaH
 
naïve
23.12.19
09:14
https://dl.dropboxusercontent.com/s/5wn86jknsy4j6gp/2019-12-23_09h12_53.png?dl=0
вверху таблица которая зашифрована в файле

сам файл:
https://yadi.sk/d/SiBqLWr3lnFaAA

как получить таблицу значений?
1 Djelf
 
23.12.19
10:19
Блоб, как блоб...
За Spectr0х00 идет
0х08000000 0х13030000
0х10000000 0х13030000
декодируем в обратном порядке байт
8 787
16 787
с округлением и смещением на 100, 787 -> 7.9
Spectr0х00 2 шт, во втором тоже смое, вот вся табличка из блоба и получена
2 RomaH
 
naïve
23.12.19
10:52
чё как?

&НаКлиенте
Процедура Прочитать(Команда)
    
    ИмяФайла = "C:\mbn\data\Иванов_И_703DE4E396C84E57A8C8A6AE84F1AFF3\vibro.svr";
    
    ПоследовательностьНаме = Новый Массив();
    ПоследовательностьНаме.Добавить(78);
    ПоследовательностьНаме.Добавить(97);
    ПоследовательностьНаме.Добавить(109);
    ПоследовательностьНаме.Добавить(101);
    
    ПоследовательностьНормИд = Новый Массив();
    ПоследовательностьНормИд.Добавить(78);
    ПоследовательностьНормИд.Добавить(111);
    ПоследовательностьНормИд.Добавить(114);
    ПоследовательностьНормИд.Добавить(109);
    ПоследовательностьНормИд.Добавить(73);
    ПоследовательностьНормИд.Добавить(100);
    
    ПоследовательностьСпектр = Новый Массив();
    ПоследовательностьСпектр.Добавить(83);
    ПоследовательностьСпектр.Добавить(112);
    ПоследовательностьСпектр.Добавить(101);
    ПоследовательностьСпектр.Добавить(99);
    ПоследовательностьСпектр.Добавить(116);
    ПоследовательностьСпектр.Добавить(114);
    
    ДД = Новый ДвоичныеДанные(ИмяФайла);
    
    Поток = ДД.ОткрытьПотокДляЧтения();
    
    Буфер = Новый БуферДвоичныхДанных(ДД.Размер());
    
    Поток.Прочитать(Буфер,0,ДД.Размер());
    
    Буфер.ПрочитатьЦелое32(448);
    
    Текст = Новый ЧтениеТекста(Поток);
    ТТ = Текст.Прочитать();
    
    
    НачалоСтроки = 0;
    НомерПроверки = 0;
    
    ЧитаемыйБайт = 0;
    
    Пока Истина Цикл
            
        Для Ш = ЧитаемыйБайт По ДД.Размер() - 1 Цикл
            Байт =  Буфер[Ш];
            
            Если НомерПроверки = ПоследовательностьНаме.ВГраница() Тогда
                ЧитаемыйБайт = Ш + 2;
                Прервать;
            КонецЕсли;
            
            Если Байт = ПоследовательностьНаме[НомерПроверки] Тогда
                НомерПроверки = НомерПроверки + 1;
                Продолжить;
            КонецЕсли;
            
            НомерПроверки = 0;
            
        КонецЦикла;
        
        Если ЧитаемыйБайт > ДД.Размер() - 1 Тогда
            Прервать;
        КонецЕсли;
        
        //Тут начало Наименования теста
        
        //Дальше NormId  
        НомерПроверки = 0;
        Для Ш = ЧитаемыйБайт По ДД.Размер() - 1 Цикл
            Байт =  Буфер[Ш];
            Если НомерПроверки = ПоследовательностьНормИд.ВГраница() Тогда
                ЧитаемыйБайт = Ш + 2;
                Прервать;
            КонецЕсли;
            
            Если Байт = ПоследовательностьНормИд[НомерПроверки] Тогда
                НомерПроверки = НомерПроверки + 1;
                Продолжить;
            КонецЕсли;
            
            НомерПроверки = 0;
            
        КонецЦикла;
        
        Если ЧитаемыйБайт > ДД.Размер() - 1 Тогда
            Прервать;
        КонецЕсли;
        
        //Потом Spectr
        НомерПроверки = 0;
        Для Ш = ЧитаемыйБайт По ДД.Размер() - 1 Цикл
            Байт =  Буфер[Ш];
            
            Если НомерПроверки = ПоследовательностьСпектр.ВГраница() Тогда
                ЧитаемыйБайт = Ш + 2;
                Прервать;
            КонецЕсли;
            
            Если Байт = ПоследовательностьСпектр[НомерПроверки] Тогда
                НомерПроверки = НомерПроверки + 1;
                Продолжить;
            КонецЕсли;
            
            НомерПроверки = 0;
            
        КонецЦикла;
        
        Если ЧитаемыйБайт > ДД.Размер() - 1 Тогда
            Прервать;
        КонецЕсли;
        
        //ЧитаемСпектр
        //Количество
        Количество = 7;
        Длина = 4;
        
        Для л = 1 По Количество Цикл
            
            Спектр = Буфер.ПрочитатьЦелое32(ЧитаемыйБайт);
            ЧитаемыйБайт = ЧитаемыйБайт + 4;
            Значение = Буфер.ПрочитатьЦелое32(ЧитаемыйБайт);
            ЧитаемыйБайт = ЧитаемыйБайт + 4;
            
            Сообщить("" + Спектр + " - " + Значение);
            
        КонецЦикла;
        
        Если ЧитаемыйБайт > ДД.Размер() - 1 Тогда
            Прервать;
        КонецЕсли;
        
    КонецЦикла;

КонецПроцедуры
3 Djelf
 
23.12.19
11:05
(2) Нормально.
Только у тебя жестко зашито Количество = 7 и Длина = 4
По виду 7 и 4 после NormId mbn5 в блобе лежит.
А количество спектров (2) после VibrCount.
4 Lama12
 
23.12.19
11:09
(2) В мемориз.
5 RomaH
 
naïve
23.12.19
12:02
(3) это да - набросал что бы только понять что как
правилен ли подход к чтению таких данных
6 Djelf
 
23.12.19
12:11
(5) Это понятно. Я поэтому и написал что "нормально". Для первой итерации сойдет.
В идеале нужно структуру описать и разбирать уже по ней, т.к. возможны варианты этого формата.
А расковыривать структуру удобно в чем то типа 010Editor, HexEditorNeo или аналогах, правда они все платные, но и триалки хватит.
8 acht
 
24.12.19
16:33
О, нам сейчас ботики ссылку на что-то скинут (:
9 Kigo_Kigo
 
24.12.19
16:51
(7) Вот и выросло поколение которое не умеет мапить CDA диски на  комп Бббгбгбгггггг
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший