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