![]() |
|
Разбор 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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |