|   |   | 
| 
 | Как строку закодировать в hex-кодировке | ☑ | ||
|---|---|---|---|---|
| 0
    
        Aleksey1989 24.08.16✎ 18:19 | 
        Добрый вечер. Подскажите, пжл, как можно средствами 1С закодировать строку в hex-кодировке, есть ли встроенные функции?     | |||
| 1
    
        shuhard 24.08.16✎ 18:20 | 
        (0) кури 8.3.9     | |||
| 2
    
        Garykom гуру 24.08.16✎ 18:20 | 
        wtf "hex-кодировке" ?     | |||
| 3
    
        NorthWind 24.08.16✎ 18:28 | 
        КодСимв каждого символа строки и потом его в 16-ричное представление - функция тут в книге знаний была, помню. Так что, видимо, все можно.     | |||
| 4
    
        Mauser 24.08.16✎ 18:31 | 
        (0) гДЕЯ оХГДЕЖ ?     | |||
| 5
    
        Mauser 24.08.16✎ 18:31 | 
        Исходная строка-то в какой кодировке?     | |||
| 6
    
        Aleksey1989 24.08.16✎ 18:34 | 
        (5) Исходная строка - это переменная типа "Строка" в 1С.     | |||
| 7
    
        Mauser 24.08.16✎ 18:41 | 
        (6) Тогда (3) с учетом того, что код будет 16-битным. Порядок байт в результате выберешь по вкусу.     | |||
| 8
    
        Aleksey1989 24.08.16✎ 18:45 | 
        Спасибо всем за советы!     | |||
| 9
    
        NorthWind 24.08.16✎ 19:10 | 
        Функцию преобразования числа в 16-ричный код можно написать и самому. Делишь число на 16 с остатком. Остаток от деления - значение от 0 до 15 - это и будет очередная цифра 16-ричного числа (только нужно будет преобразовать 10,11,12,13,14,15 в A,B,C,D,E,F соответственно). Частное от деления вновь делите на 16 и опять остаток от деления - следующая цифра, полученное частное опять на 16... и так до тех пор пока очередное частное не окажется меньше 16. Это будет последняя цифра искомого числа.     | |||
| 10
    
        Mauser 24.08.16✎ 19:13 | 
        (9) Фигу. В данном случае надо всегда делать ровно 4 итерации деления на 16     | |||
| 11
    
        NorthWind 24.08.16✎ 19:16 | 
        (10) это смотря какое число. Если у вас исходное число 17, то итерация будет одна. Остаток получится 1 и частное тоже 1, результат - 11h.     | |||
| 12
    
        NorthWind 24.08.16✎ 19:17 | 
        ну и да, если стоит задача "нарисовать" сколько-то байтовое представление, то результат надо выровнять нулями и пробелами до нужного вида.     | |||
| 13
    
        Mauser 24.08.16✎ 19:18 | 
        (11) Если ты хочешь зашифровать исходную строку невосстановимо, то да.     | |||
| 14
    
        Serginio1 24.08.16✎ 19:43 | 
        ТипhexBinary    = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "hexBinary"); 
 ДвоичныеДанные = ФабрикаXDTO.Создать(ТипhexBinary,ДвоичныеДанные); Сообщить(ДвоичныеДанные.ЛексическоеЗначение); | |||
| 15
    
        Mauser 24.08.16✎ 19:50 | 
        (14) А теперь читаем (6) и преобразуем строку в двоичные данные. Желательно без дотнета.     | |||
| 16
    
        Лефмихалыч 24.08.16✎ 20:28 | 
        СтрокаВХексКодировке = XMLСтрока(ИсходнаяСтрока)     | |||
| 17
    
        Serginio1 24.08.16✎ 20:40 | 
        (15) Тогда преобразуем в Base64 из неё в ДД.     | |||
| 18
    
        Serginio1 24.08.16✎ 20:47 | 
        (16) Или
 ДД=XMLЗначение(Тип("ДвоичныеДанные"),ИсходнаяСтрока); | |||
| 19
    
        Serginio1 24.08.16✎ 20:50 | 
        (15) Вот с нетом это делается моментом, куча функций. А с чистым 1С нужно постоянно приседать.     | |||
| 20
    
        Torquader 24.08.16✎ 20:56 | 
        (19) А нахрена чистому 1С строка в Hex-кодировке ?
 Function StringToHex(pStr) l=StrLen(pStr); r=""; For i=1 To l Do k=CharCode(pStr,i); t=""; For j=1 To 4 Do u=k Mod 16; t=Mid("0123456789ABCDEF",u+1,1)+t; k=(k-u)/16; EndDo; r=r+t; EndDo; Return r; EndFunction | |||
| 21
    
        Serginio1 24.08.16✎ 21:00 | 
        (20) Ты не поверишь, чего только не бывает. Это ты ТК спроси     | |||
| 22
    
        Mauser 24.08.16✎ 21:30 | 
        (19) Как по вашему, насколько велик будет спрос на подобную технологию?     | |||
| 23
    
        Zamestas 24.08.16✎ 21:36 | 
        (20) +1     | |||
| 24
    
        Zamestas 24.08.16✎ 21:50 | 
        +(23) Нужная отдельная секция: 1С 8 хочу странного. В которой ТС обязательно должен объяснить что, и для чего он хочет получить странного и накуя это ему надо.     | |||
| 25
    
        Serginio1 24.08.16✎ 21:54 | 
        (22) Ты не поверишь, но сейчас в 1С куча народа использует .Net в качестве СОМ. Ответ большой.     | |||
| 26
    
        Mauser 24.08.16✎ 21:56 | 
        (25) Даже под Linux?     | |||
| 27
    
        Serginio1 24.08.16✎ 22:02 | 
        (26) Сначала нужно найти этих линуксоидов. Или их нет, потому что на линукс нет COM?     | |||
| 28
    
        Torquader 24.08.16✎ 22:03 | 
        (27) Начнём с того, что большая часть торгового оборудования на Linux заводится совершенно по-другому, нежели в Windows.     | |||
| 29
    
        NorthWind 24.08.16✎ 22:04 | 
        (24) не знают/не умеют делать в другом, вот и хотят в 1С     | |||
| 30
    
        NorthWind 24.08.16✎ 22:06 | 
        в принципе, ничего страшного в этом нет, можно и в 1С много чего делать. Но а) нужно знать алгоритмы, и б) мешает отсутствие битовой арифметики и полноценной поддержки двоички.     | |||
| 31
    
        Zamestas 24.08.16✎ 22:08 | 
        (27) Для начала нужно понять - почему какую то информацию нельзя получить и переварить платформой.     | |||
| 32
    
        Zamestas 24.08.16✎ 22:11 | 
        (30) Чем Вам отсутствие двоички мешает - какие дикие алгоритмы это требуют?     | |||
| 33
    
        NorthWind 24.08.16✎ 22:14 | 
        (32) ну, пару раз был интерес считать произвольные данные из бинарника. Получить несколько значений из серединки - байтовых, двухбайтовых.     | |||
| 34
    
        NorthWind 24.08.16✎ 22:15 | 
        компорт бы уже можно было бы и присобачить штатно без компонент...     | |||
| 35
    
        NorthWind 24.08.16✎ 22:16 | 
        много чего можно было бы, если подумать     | |||
| 36
    
        Zamestas 24.08.16✎ 22:24 | 
        (33) Пример можно в студию? Я (каюсь) - рассчитывал вхождения IP адресов хостов/подсетей в подсети с произвольной маской (и тех и других) без "двоички" без битовых масок и особых преобразований (<= >= хватило).     | |||
| 37
    
        Serginio1 24.08.16✎ 22:29 | 
        (28) Ну на самом деле обычно к любому оборудованию идет API на C#. Сейчас с выходом .Net Core будут делать о по NetStandart, так как он кроссплатформенный.     | |||
| 38
    
        NorthWind 24.08.16✎ 22:31 | 
        (36) что именно не понятно? Есть на диске файл, двоичный. В нем 10К разных байт от 0 до 255. Нужно по смещению, скажем, 20, определить какое 16-битовое число лежит. Как вы это в 1С сделаете?     | |||
| 39
    
        NorthWind 24.08.16✎ 22:32 | 
        файлы складываются сторонней программой, попросить ее складывать в тексте или в XML - нельзя     | |||
| 40
    
        Zamestas 24.08.16✎ 22:34 | 
        (39) Тут согласен - проще парсер один раз отписать на (37).     | |||
| 41
    
        Torquader 24.08.16✎ 22:50 | 
        (37) К иностранному оборудованию часто идёт просто JavaPos-драйвер, и больше ничего.     | |||
| 42
    
        Torquader 24.08.16✎ 22:52 | 
        (38) ЧтениеТекста в нужной кодировке позволит это сделать - конечно - не быстро и с бубном - но можно.     | |||
| 43
    
        Serginio1 24.08.16✎ 22:53 | 
        (41) Для Windows обязательно идут на C#. С выходом .Net Core будут делать кроссплатформенные библиотеки. Просто .Net Core в релизе меньше месяца     | |||
| 44
    
        Zamestas 24.08.16✎ 22:53 | 
        (42) Оно если битовое и на ссылках - то диаметр бубна сильно возрастает.     | |||
| 45
    
        NorthWind 24.08.16✎ 22:55 | 
        (40) ну так-то да. Только вообще проще всего было бы, если бы бинарка нормально обрабатывалась средствами языка. Т.е. если бы по ДвоичнымДанным можно было бы позиционироваться, получать из них куски требуемого размера, делать с ними битовые операции и преобразовывать в другие типы данных. И, кстати, это обещают сделать.     | |||
| 46
    
        Torquader 24.08.16✎ 22:55 | 
        (43) Я видел кучу оборудования, где драйвер с примерами на Си - особенно это Windows CE касается, хотя там тоже есть Net.     | |||
| 47
    
        Zamestas 24.08.16✎ 22:55 | 
        (43) Может Вам какую нить Библиотеку Стандартных Драйверов запилить?     | |||
| 48
    
        Zamestas 24.08.16✎ 22:57 | 
        +(47) Востребованный весьма функционал.     | |||
| 49
    
        Torquader 24.08.16✎ 22:57 | 
        (44) Я расчёт Md5 писал на VbScript, где тоже с битовыми операциями не очень - делал через умножение и деление с остатком и разбивая каждый регистр на две переменных, а потом это чудо запихивал в 1С 7.7 - и работало.     | |||
| 50
    
        Serginio1 24.08.16✎ 22:59 | 
        (46) Я писал под WinCE на .Net. Кроме того есть Interop
 (47) Ты про это http://its.1c.ru/db/metod8dev/content/4829/hdoc | |||
| 51
    
        Zamestas 24.08.16✎ 23:08 | 
        (50) Да.     | |||
| 52
    
        Zamestas 24.08.16✎ 23:14 | 
        +(51) Оно может быть ленивым - типо местного пофигуратора  - есть исходные -> шаблон (аля XML под конкретное ПО) для преобразования в конечные данные и обратно.     | |||
| 53
    
        Serginio1 24.08.16✎ 23:16 | 
        (51) Можно и сейчас обернуть C++ библиотеки через Interop.
 Только у меня нет ни торгового оборудования, но Линукса. | |||
| 54
    
        Zamestas 24.08.16✎ 23:18 | 
        (53) Если будет возможность крутить команды драйвера ПО через какой нить аналог пофигуратора - будет все.     | |||
| 55
    
        Zamestas 24.08.16✎ 23:18 | 
        *ТО (торгового оборудования)     | |||
| 56
    
        Torquader 24.08.16✎ 23:31 | 
        (50) Проблема была в том, что пришлось отлаживать Dll драйвера, так как в ней просто оказалась ошибка, и несколько последних символов кода, если он больше 16 - шли коту под хвост.
 И потом, для CE проще на Си писать - оно быстрее работает. | |||
| 57
    
        Ёпрст гуру 25.08.16✎ 07:52 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |