|   |   | 
| 
 | Разбор BIN файла | ☑ | ||
|---|---|---|---|---|
| 0
    
        web_profiler 16.01.16✎ 13:13 | 
        Есть бинарник
 разобрал его на байты разобрал байты по типам и получил http://iscr.ru/1452938802/ вот такую структуру далее выбираю нужный массив байт и его надо как-то трансформировать к читабельному виду к примеру штрихкод (если преобразовать массив байт в строку64 и далее Base64Значение) получается таким: 1A 9E DF 02 00 00 00 00 типы значений вот: http://iscr.ru/1452939073/ Как мне штрихкод в двоичном формате (я так понял DWord) 1A 9E DF 02 00 00 00 00 преобразовать к нормальному виду 48209434 ? | |||
| 1
    
        web_profiler 16.01.16✎ 13:16 | 
        ах да забыл, из описания: "Информация сохраняется в двоичный файл, в соответствии с протоколом обмена, без разделителей. Числа записывается младшим байтом вперед. Текстовая информация в кодировке WIN-1251"     | |||
| 2
    
        web_profiler 16.01.16✎ 13:16 | 
        протокол обмена: http://iscr.ru/1452939073/     | |||
| 3
    
        Garykom гуру 16.01.16✎ 13:17 | ||||
| 4
    
        web_profiler 16.01.16✎ 13:26 | 
        (3) перевел 1A 9E DF 02 00 00 00 00 и получил 309 485 009 821 345 068 724 781 056
 мож я чето не то делаю? | |||
| 5
    
        Garykom гуру 16.01.16✎ 13:27 | 
        (4) переверни исходное перед переводом ))     | |||
| 6
    
        web_profiler 16.01.16✎ 13:27 | 
        у меня возвращаемый тип походу должен быть DWord     | |||
| 7
    
        H A D G E H O G s 16.01.16✎ 13:31 | 
        Упи&*ил бы того, кто разбирает байт на биты в своих прогах для "оптимизации".
 Минимальный квант информации - байт. | |||
| 8
    
        web_profiler 16.01.16✎ 13:33 | 
        как перевернуть? 
 типа 1A 9E DF 02 00 00 00 00 должно так быть? 00 00 00 00 20 FD E9 F1 | |||
| 9
    
        web_profiler 16.01.16✎ 13:34 | 
        (7) HELP!!!!!!!!     | |||
| 10
    
        Garykom гуру 16.01.16✎ 13:34 | 
        (7) в "больших системах" да, согласен меньше байта нет смысла
 но вот если stm32 или arduino, то кучу булевых значений на каждое целый байт тратить? при ограничениях на память? | |||
| 11
    
        web_profiler 16.01.16✎ 13:35 | 
        помогите разобрать, пожалуйста     | |||
| 12
    
        H A D G E H O G s 16.01.16✎ 13:35 | 
        Как мне штрихкод в двоичном формате (я так понял DWord) 1A 9E DF 02 00 00 00 00
 Это не Дворд, это int64/QWORD | |||
| 13
    
        Garykom гуру 16.01.16✎ 13:37 | 
        (11) у меня подозрение что смешались в кучу люди кони... base64 и 2^10     | |||
| 14
    
        web_profiler 16.01.16✎ 13:47 | 
        (13) кассовый аппарат mini-t400me, выгрузил bin файл, 
 BinaryData = новый ДвоичныеДанные("D:\111.bin"); Строка64=Base64Строка(BinaryData); Массив64 = Преобразовать64(Строка64); штрих = новый Массив; //просто для проверки из выборки штрих.Добавить(26); штрих.Добавить(158); штрих.Добавить(223); штрих.Добавить(2); штрих.Добавить(0); штрих.Добавить(0); штрих.Добавить(0); штрих.Добавить(0); СтрокаШтрих64 = Преобразовать64(, штрих); ДвоичШтрих = Base64Значение(СтрокаШтрих64); //1A 9E DF 02 00 00 00 00 | |||
| 15
    
        web_profiler 16.01.16✎ 13:49 | 
        Функция Преобразовать64(Строка64 = неопределено, Массив64 = неопределено)
 Таб64 = Новый ТаблицаЗначений; Таб64.Колонки.Добавить("Код"); Таб64.Колонки.Добавить("Символ"); Нпп = 0; Для Код = КодСимвола("A") По КодСимвола("Z") Цикл стр = Таб64.Добавить(); стр.Код = Нпп; стр.Символ = Символ(Код); Нпп = Нпп + 1; КонецЦикла; Для Код = КодСимвола("a") По КодСимвола("z") Цикл стр = Таб64.Добавить(); стр.Код = Нпп; стр.Символ = Символ(Код); Нпп = Нпп + 1; КонецЦикла; стр = Таб64.Добавить(); стр.Код = Нпп; стр.Символ = "0"; Нпп = Нпп + 1; Для Код = 1 По 9 Цикл стр = Таб64.Добавить(); стр.Код = Нпп; стр.Символ = Формат(Код,"ЧЦ=1; ЧДЦ=0"); Нпп = Нпп + 1; КонецЦикла; стр = Таб64.Добавить(); стр.Код = Нпп; стр.Символ = "+"; Нпп = Нпп + 1; стр = Таб64.Добавить(); стр.Код = Нпп; стр.Символ = "/"; Если Массив64 = неопределено Тогда Если Строка64 = неопределено Тогда Сообщить("неверный вызов функции"); Возврат неопределено; КонецЕсли; //Уберем переносы строк Строка64 = СтрЗаменить(Строка64, Символ(10), ""); Строка64 = СтрЗаменить(Строка64, Символ(13), ""); //преобразовываем строку в массив Если СтрДлина(Строка64) % 4 <> 0 Тогда Сообщить("длина строки на входе должна быть кратна 4"); Сообщить(СтрДлина(Строка64)); Возврат неопределено; КонецЕсли; Кол4 = Цел(СтрДлина(Строка64) / 4); РазмерМ = Кол4 * 3; Если Прав(Строка64, 2) = "==" Тогда РазмерМ = РазмерМ - 2; ИначеЕсли Прав(Строка64, 1) = "=" Тогда РазмерМ = РазмерМ - 1; КонецЕсли; Массив64 = Новый Массив(РазмерМ); Для А = 1 По Кол4 Цикл Число3 = 0; Для Б = 1 По 4 Цикл Буква1 = Сред(Строка64, (А-1)*4 + Б, 1); Если Буква1 = "=" Тогда Код4 = 0; Иначе стрН = Таб64.Найти(Буква1, "Символ"); Если стрН = Неопределено Тогда Сообщить("ошибка при поиске "+ КодСимвола(Буква1)); Иначе Код4 = стрН.Код; КонецЕсли; КонецЕсли; Число3 = Число3 * 64 + Код4; КонецЦикла; Ост = Число3 % 256; Индекс = (А-1)*3 + 2; Если Индекс <= РазмерМ - 1 Тогда Массив64[Индекс] = Ост; КонецЕсли; Число3 = (Число3 - Ост) / 256; Ост = Число3 % 256; Индекс = (А-1)*3 + 1; Если Индекс <= РазмерМ - 1 Тогда Массив64[Индекс] = Ост; КонецЕсли; Число3 = (Число3 - Ост) / 256; Ост = Число3 % 256; Массив64[(А-1)*3 + 0] = Ост; КонецЦикла; Возврат Массив64; Иначе //Преобразовываем массив в строку Строка64 = ""; Кол3 = Цел(Массив64.Количество() / 3); Если Массив64.Количество() % 3 <> 0 Тогда Кол3 = Кол3 + 1; КонецЕсли; Для А = 1 По Кол3 Цикл Число3 = Массив64[(А-1)*3]; Если (А-1)*3+1 <= Массив64.ВГраница() Тогда Код3 = Массив64[(А-1)*3+1]; Иначе Код3 = 0; КонецЕсли; Число3 = Число3*256 + Код3; Если (А-1)*3+2 <= Массив64.ВГраница() Тогда Код3 = Массив64[(А-1)*3+2]; Иначе Код3 = 0; КонецЕсли; Число3 = Число3*256 + Код3; Ост4 = Число3 % 64; Число3 = (Число3 - Ост4) / 64; Ост3 = Число3 % 64; Число3 = (Число3 - Ост3) / 64; Ост2 = Число3 % 64; Число3 = (Число3 - Ост2) / 64; Ост1 = Число3 % 64; Число3 = (Число3 - Ост1) / 64; стрН = Таб64.Найти(Ост1, "Код"); Если стрН = неопределено Тогда Сообщить("Ошибка при поиске"); Иначе Строка64 = Строка64 + стрН.Символ; КонецЕсли; стрН = Таб64.Найти(Ост2, "Код"); Если стрН = неопределено Тогда Сообщить("Ошибка при поиске"); Иначе Строка64 = Строка64 + стрН.Символ; КонецЕсли; стрН = Таб64.Найти(Ост3, "Код"); Если стрН = неопределено Тогда Сообщить("Ошибка при поиске"); Иначе Строка64 = Строка64 + стрН.Символ; КонецЕсли; стрН = Таб64.Найти(Ост4, "Код"); Если стрН = неопределено Тогда Сообщить("Ошибка при поиске"); Иначе Строка64 = Строка64 + стрН.Символ; КонецЕсли; КонецЦикла; //Если количество символов не делится на 3, то на конце должны быть //знаки "=" Если Массив64.Количество() % 3 = 1 Тогда Строка64 = Лев(Строка64, СтрДлина(Строка64)-2)+ "=="; ИначеЕсли Массив64.Количество() % 3 = 2 Тогда Строка64 = Лев(Строка64, СтрДлина(Строка64)-1)+ "="; КонецЕсли; Возврат Строка64; КонецЕсли; КонецФункции | |||
| 16
    
        web_profiler 16.01.16✎ 14:36 | 
        у меня так и не получилось преобразовать 1A 9E DF 02 00 00 00 00 в 48209434 
 ткните носом, что я не так делаю? | |||
| 17
    
        Кирпич 16.01.16✎ 14:44 | 
        (16) 02DF9E1A это 48209434. найди где нибудь функцию перевода из 16 в десятичную     | |||
| 18
    
        DES 16.01.16✎ 14:44 | 
        кстати, ктонить знает как в бинарном файле заменить 1 байт на языке 1с ?     | |||
| 19
    
        web_profiler 16.01.16✎ 14:46 | 
        через конвертер понял, что мне надо как-то получть тип UINT32 (DCBA) 
 http://iscr.ru/1452944794/ | |||
| 20
    
        web_profiler 16.01.16✎ 14:48 | 
        (17) уже нашел - не работает
 Функция Из_Любой_В_10(Знач Значение="0",Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат(0) КонецЕсли; Значение=СокрЛП(Значение); Если Значение="0" Тогда Возврат(0) КонецЕсли; Результат=0; Длина=СтрДлина(Значение); Для Х=1 По Длина Цикл М=1; Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла; Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М; КонецЦикла; Возврат Окр(Результат); КонецФункции | |||
| 21
    
        Кирпич 16.01.16✎ 14:48 | 
        (20) работает
 Функция Из_Любой_В_10(Знач Значение="0",Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат(0) КонецЕсли; Значение=СокрЛП(Значение); Если Значение="0" Тогда Возврат(0) КонецЕсли; Результат=0; Длина=СтрДлина(Значение); Для Х=1 По Длина Цикл М=1; Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла; Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М; КонецЦикла; Возврат Окр(Результат); КонецФункции &НаКлиенте Процедура Команда1(Команда) //"00000002DF9E1A" // Вставить содержимое обработчика. Сообщить(Из_Любой_В_10("2DF9E1A",16)); КонецПроцедуры | |||
| 22
    
        web_profiler 16.01.16✎ 14:50 | 
        кстати, еше INT32 правильное значение
 http://iscr.ru/1452945020/ | |||
| 23
    
        web_profiler 16.01.16✎ 14:51 | 
        Сообщить(Из_Любой_В_10("2DF9E1A",16));
 походу понял "16" а не как я 36 | |||
| 24
    
        Кирпич 16.01.16✎ 14:51 | 
        (22) да хоть INT128     | |||
| 25
    
        web_profiler 16.01.16✎ 14:52 | 
        елки палки 
 502 450 310 926 442 618 854 309 632 это я получаю | |||
| 26
    
        Кирпич 16.01.16✎ 14:52 | 
        (25) кончай тупить     | |||
| 27
    
        web_profiler 16.01.16✎ 14:53 | 
        :( в 4 прилег :(     | |||
| 28
    
        Кирпич 16.01.16✎ 14:53 | 
        Сообщить(Из_Любой_В_10("2DF9E1A",16)); будет только 48 209 434     | |||
| 29
    
        Кирпич 16.01.16✎ 14:54 | 
        ты наверное байты не меняешь местами     | |||
| 30
    
        web_profiler 16.01.16✎ 14:54 | ||||
| 31
    
        web_profiler 16.01.16✎ 14:55 | 
        я двданные вместо строки в функию подставляю     | |||
| 32
    
        Кирпич 16.01.16✎ 14:57 | 
        (31) ты в школе на информатику вообще ходил? какие двоичные данные если строка нужна?     | |||
| 33
    
        web_profiler 16.01.16✎ 14:57 | 
        да понял уже, не выспанный     | |||
| 34
    
        Garykom гуру 16.01.16✎ 14:57 | 
        (18) через издевательства с двоичные данные и base64 ?
 http://catalog.mista.ru/public/252365/ | |||
| 35
    
        Garykom гуру 16.01.16✎ 15:00 | 
        (34)+ для 7.7 нужна ВК http://catalog.mista.ru/public/127873/
 ЗЫ когда то делал через это драйвер низкоуровневый для DBF файлов... потому что один особо умный разраб в char поля используемые как индекс таблицы на засовывал "непечатных символов" (коды ASCII до 32) которые ничем оттуда не выковыривались правильно | |||
| 36
    
        web_profiler 16.01.16✎ 15:00 | 
        (32) спасибо за "расчихление" меня     | |||
| 37
    
        Музон Хиггса 16.01.16✎ 16:39 | 
        (7) Байту байтово, а биту битово.     | |||
| 38
    
        vde69 16.01.16✎ 17:19 | 
        (7) ты никогда не встречал железо работающее на 6 разрядной двоичной системе? где 1 байт состоит из 6 бит ??? 
 среди перефирийки до сих пор экзотики полно... я встречал например 12х разрядный умножитель :) и параллельный порт с 4 пинами передачи данных... | |||
| 39
    
        Кирпич 16.01.16✎ 18:50 | 
        1с могли бы уже добавить работу с двоичными данными нормальную. Вроде не бухгалтера на 1с пишут давно.     | |||
| 40
    
        Кирпич 16.01.16✎ 18:55 | 
        наверное боятся, что вирусы начнут на 1с писать     | |||
| 41
    
        web_profiler 16.01.16✎ 19:11 | 
        продолжим?     | |||
| 42
    
        web_profiler 16.01.16✎ 19:11 | 
        есть ДвДанные 21 - теперь эту штуку мне в биты надо разложить     | |||
| 43
    
        web_profiler 16.01.16✎ 19:12 | 
        т.е. чтоб получить 10000100     | |||
| 44
    
        web_profiler 16.01.16✎ 19:14 | ||||
| 45
    
        web_profiler 16.01.16✎ 19:14 | 
        п.с. ДвДанные этого байта я получил     | |||
| 46
    
        Гобсек 17.01.16✎ 14:45 | 
        (39)+1     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |