Имя: Пароль:
1C
 
Как строку закодировать в 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
(0)
на вот, универсальные механизмы
http://my1c-archive.narod.ru/knowhow/uni_conv.html