|
ГУИД в массив байт, а затем сконвертировать в base64 строку | ☑ | ||
---|---|---|---|---|
0
fantomrik
12.01.18
✎
09:44
|
Коллеги привет!
Делаю задачку по интеграции 1С и некого сайта. Мне нужно посылать определенные запросы, в теле которого определенным значением должен выступать GUID. Я попробовал передавать стандартный Новый УникальныйИдетификатор, но сайту он не подходит. Программист со стороны сайта попросил следующее и привел пример, как надо сделать: - ГУИДЫ должны быть преобразованы в массив байт а затем сконвертированы в base64 строку. https://hostingkartinok.com/show-image.php?id=ca8266833c3b9d545a9e5df8f69557a7 Собственно не понимаю как в 1С мне это сделать? |
|||
1
fantomrik
12.01.18
✎
09:50
|
И вобще такое возможно чисто в 1С сделать или надо просить писать для данной задачи DLL-ку ребят с другого отдела?
|
|||
2
xaozai
12.01.18
✎
10:01
|
||||
3
Юрий Лазаренко
12.01.18
✎
10:03
|
(0) А что может быть не так с ГУИДом? В ГУИДе используются только латинские символы, с ними при передаче на сайт ничего произойти не может, это же не кириллица.
|
|||
4
v77
12.01.18
✎
10:11
|
(0) ну возьми ГУИД как строку, ГУИД состоит из 16-ричных циферок, забей эти циферки в массив, массив закодируй в base64
приступай! |
|||
5
fantomrik
12.01.18
✎
10:14
|
(2) спасибо, из статьи получается, если
1) Если из гуида убрать символы "-", то это и есть двоичные данные закодированные в base64: Base64Строка(Base64Значение("4e090376071043d29609c398fa23caa9")) = "4e090376071043d29609c398fa23caa9" 2) в статье описана функция, как получить из строки массив байтов, но в 1С нет же функции как из этого массива собрать base64 строку, что хочет от меня программист сайта. (3) Не знаю, уточню у него. (4) Как массив закодировать в base64? В base64 можно же только двоичные данные закодировать вроде в 1С |
|||
6
v77
12.01.18
✎
10:14
|
в 1с есть ДвоичныеДанные и ПотокВПамяти
|
|||
7
v77
12.01.18
✎
10:17
|
(5) ну ты попробуй такой же ГУИД как в примере из (0) закодируй как в (5). если прокатит, то вопрос решен
|
|||
8
fantomrik
12.01.18
✎
10:20
|
(7) закодировать через ПотокВПамяти?
|
|||
9
dezss
12.01.18
✎
10:22
|
Проси у него пример строки и результат.
Потом пробуй строку записать в файл, из него в ДвоичныеДанные, а их уже в base64. |
|||
10
dezss
12.01.18
✎
10:24
|
(9)+ Если не будет сходиться (только проверь на всех возможных кодировках файла), то преобразуй уже в массив байт (хотя я в этом никакого смысла не вижу, так как двоичные данные им по сути и являются).
|
|||
11
v77
12.01.18
✎
10:34
|
(8) ну как ты делал
Base64Строка(Base64Значение("4e090376071043d29609c398fa23caa9")) = "4e090376071043d29609c398fa23caa9" |
|||
12
fantomrik
12.01.18
✎
16:10
|
Решил задачу благодаря Использование классов .Net в 1С для новичков
Скачал http://files.rsdn.ru/19608/ФайлыNetObjectToIDispatch.zip , зарегал и делаю так: NetObject = Новый COMОбъект("NetObjectToIDispatch45") ; ИтоговыйGUID = NetObject.ПолучитьТип("System.Convert").ToBase64String(NetObject.ПолучитьТип("System.Guid").Parse("08ed0482-a722-4182-b410-e77f3acc34e6").ToByteArray()); (ИтоговыйGUID = "ggTtCCKngkG0EOd/Osw05g==") |
|||
13
dezss
12.01.18
✎
16:40
|
(12) блин...один я не пойму, почему результат меньше исходного текста?
или ГУИД все же не совсем текст и в виде массива байт он короче своего строкового представления? |
|||
14
Вафель
12.01.18
✎
16:42
|
(13) гуид - это 16байт
|
|||
15
dezss
12.01.18
✎
16:47
|
(14) блин, точна...спасибо...
1с развращает в этом плане, забываешь азы))) |
|||
16
H A D G E H O G s
12.01.18
✎
16:59
|
УИДСтрокой="08ed0482-a722-4182-b410-e77f3acc34e6";
УИДСтрокой=СтрЗаменить(УИДСтрокой,"-",""); БуферДанных=ПолучитьБуферДвоичныхДанныхИзHexСтроки(УИДСтрокой); Результат=ПолучитьBase64СтрокуИзБуфераДвоичныхДанных(БуферДанных); Сообщить(Результат); |
|||
17
H A D G E H O G s
12.01.18
✎
16:59
|
Добро пожаловать в новый светлый мир, Нео
|
|||
18
Вафель
12.01.18
✎
17:34
|
(16) у тебя в итоге получается CO0EgqciQYK0EOd/Osw05g==, а не как в (12)
|
|||
19
Вафель
12.01.18
✎
17:34
|
основной затык здесь получить гуид в виде byteArray
|
|||
20
dezss
12.01.18
✎
17:41
|
(16) нужно еще порядок байт тогда поставить по феншую))))
|
|||
21
H A D G E H O G s
12.01.18
✎
17:50
|
Это ваш C# чудит
|
|||
22
H A D G E H O G s
12.01.18
✎
18:00
|
УИДСтрокой="08ed0482-a722-4182-b410-e77f3acc34e6";
УИДСтрокой=СтрЗаменить(УИДСтрокой,"-",""); БуферДанных=ПолучитьБуферДвоичныхДанныхИзHexСтроки(УИДСтрокой); КартаИнверсии=Новый Соответствие; КартаИнверсии.Вставить(4,1); КартаИнверсии.Вставить(3,2); КартаИнверсии.Вставить(6,5); КартаИнверсии.Вставить(8,7); Для Каждого КлючИнверсии Из КартаИнверсии Цикл ЗначениеПриемника=БуферДанных.Получить(КлючИнверсии.Значение-1); ЗначениеИсточника=БуферДанных.Получить(КлючИнверсии.Ключ-1); БуферДанных.Установить(КлючИнверсии.Ключ-1,ЗначениеПриемника); БуферДанных.Установить(КлючИнверсии.Значение-1,ЗначениеИсточника); КонецЦикла; Результат=ПолучитьBase64СтрокуИзБуфераДвоичныхДанных(БуферДанных); Сообщить(Результат); |
|||
23
Serginio1
12.01.18
✎
18:29
|
(21) Угу, может 1С не так конвертирует байты?
Вспомно про v8: Как перевести ГУИД в число и обратно? |
|||
24
H A D G E H O G s
12.01.18
✎
18:33
|
Ваша C# балована.
|
|||
25
Вафель
12.01.18
✎
18:38
|
с гуидами вообще 1с как-то неохотно дружит
|
|||
26
Serginio1
12.01.18
✎
19:11
|
Добавлю ссылочку на 12
https://ru.stackoverflow.com/questions/527763/Как-вызвать-метод-из-c-в-1С/527802#527802 |
|||
27
fantomrik
17.01.18
✎
10:35
|
(22) самое оптимальное решение (0) СПАСИБО!!!
|
|||
28
H A D G E H O G s
22.01.18
✎
13:41
|
БуферДанных=ПолучитьБуферДвоичныхДанныхИзBase64Строки(Результат);
Для Каждого КлючИнверсии Из КартаИнверсии Цикл ЗначениеПриемника=БуферДанных.Получить(КлючИнверсии.Ключ-1); ЗначениеИсточника=БуферДанных.Получить(КлючИнверсии.Значение-1); БуферДанных.Установить(КлючИнверсии.Ключ-1,ЗначениеИсточника); БуферДанных.Установить(КлючИнверсии.Значение-1,ЗначениеПриемника); КонецЦикла; УИДСтрокой=ПолучитьHexСтрокуИзБуфераДвоичныхДанных(БуферДанных); Результат=сред(УИДСтрокой,1,8)+"-"+сред(УИДСтрокой,9,4)+"-"+сред(УИДСтрокой,13,4)+"-"+сред(УИДСтрокой,17,4)+"-"+сред(УИДСтрокой,21); Сообщить(Результат); |
|||
29
fantomrik
22.01.18
✎
13:52
|
(28) Мозг !!! :)
Спасибо! |
|||
30
fantomrik
24.01.18
✎
11:42
|
(28) тут кстати кусочек с "КартаИнверсии" пропущен) А так благодаря H A D G E H O G имеем чудные процедуры перевода ГУИД в Base64 и обратно
Функция ГУИД_Из_1С_в_Base64(ГУИД_Из_1С_Строкой) ГУИД_Из_1С_Строкой_ = СтрЗаменить(ГУИД_Из_1С_Строкой,"-",""); БуферДанных = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ГУИД_Из_1С_Строкой_); КартаИнверсии = Новый Соответствие; КартаИнверсии.Вставить(4,1); КартаИнверсии.Вставить(3,2); КартаИнверсии.Вставить(6,5); КартаИнверсии.Вставить(8,7); Для Каждого КлючИнверсии Из КартаИнверсии Цикл ЗначениеПриемника = БуферДанных.Получить(КлючИнверсии.Значение-1); ЗначениеИсточника = БуферДанных.Получить(КлючИнверсии.Ключ-1); БуферДанных.Установить(КлючИнверсии.Ключ-1,ЗначениеПриемника); БуферДанных.Установить(КлючИнверсии.Значение-1,ЗначениеИсточника); КонецЦикла; Возврат ПолучитьBase64СтрокуИзБуфераДвоичныхДанных(БуферДанных); КонецФункции Функция ГУИД_Из_Base64_В_1С(ГУИД_Base64_Строкой) БуферДанных = ПолучитьБуферДвоичныхДанныхИзBase64Строки(ГУИД_Base64_Строкой); КартаИнверсии = Новый Соответствие; КартаИнверсии.Вставить(4,1); КартаИнверсии.Вставить(3,2); КартаИнверсии.Вставить(6,5); КартаИнверсии.Вставить(8,7); Для Каждого КлючИнверсии Из КартаИнверсии Цикл ЗначениеПриемника = БуферДанных.Получить(КлючИнверсии.Ключ-1); ЗначениеИсточника = БуферДанных.Получить(КлючИнверсии.Значение-1); БуферДанных.Установить(КлючИнверсии.Ключ-1,ЗначениеИсточника); БуферДанных.Установить(КлючИнверсии.Значение-1,ЗначениеПриемника); КонецЦикла; УИДСтрокой = ПолучитьHexСтрокуИзБуфераДвоичныхДанных(БуферДанных); Результат = Сред(УИДСтрокой,1,8)+"-"+Сред(УИДСтрокой,9,4)+"-"+Сред(УИДСтрокой,13,4)+"-"+Сред(УИДСтрокой,17,4)+"-"+Сред(УИДСтрокой,21); Возврат Нрег(Результат); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |