0. frkbvfnjh 557 08.12.17 13:02 Сейчас в теме

Пример преобразования двоичных данных в строку

Доброго всем времени суток. Хочу поделиться маленьким решением маленькой проблемы. Думаю, будет интересно новичкам. Я не раз встречал на форумах вопрос: как преобразовать двоичные данные в строку? В частности, к примеру, частенько нужно получить хэш файла MD5 в текстовом виде, но как мы знаем 1С возвращает его в виде двоичных данных.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. apic 08.12.17 16:57 Сейчас в теме
Спасибо, теперь знаю как читать байты
2. Armando 1391 08.12.17 20:29 Сейчас в теме
Наверняка Вы пользовались СП, но не дочитали до методов ПолучитьДвоичныеДанныеИзСтроки и ПолучитьСтрокуИзДвоичныхДанных.
4. frkbvfnjh 557 09.12.17 06:48 Сейчас в теме
Можете написать как решить данную задачу с помощью этих функций (ПолучитьДвоичныеДанныеИзСтроки и ПолучитьСтрокуИзДвоичныхДанных)? У меня что-то "думки" не хватает, буду благодарен.
8. Armando 1391 09.12.17 23:54 Сейчас в теме
(4) В данном случае подойдет метод ПолучитьHexСтрокуИзДвоичныхДанных
Хэш = Новый ХешированиеДанных(ХешФункция.MD5);
Хэш.ДобавитьФайл("C:\File.bin");  
ДвоичныеДанные = Хэш.ХешСумма;

Результат = ПолучитьHexСтрокуИзДвоичныхДанных(ДвоичныеДанные);
Сообщить(Результат, СтатусСообщения.Информация);
keypax; mysm; Danil.Potapov; buddha667; user633364_seleznev.ua; kiruha; frkbvfnjh; +7 Ответить
10. frkbvfnjh 557 11.12.17 05:55 Сейчас в теме
(8) АААААААААААААААААА, Спасибо Бро!!! Не знал о таком! Не жалею, что сделал публикацию, 5 минут позора, зато узнал то, что давно мучило и не узнал бы никогда этих элементарных вещей.
kadild; Danil.Potapov; +2 Ответить
5. bulpi 157 09.12.17 15:31 Сейчас в теме
(2)
Не нашел таких методов в СП. (8.3.9)
14. Поручик 4329 13.12.17 02:54 Сейчас в теме
(9) 8.3.10 не везде есть. Некоторые наши заказчики счастливо работают на 8.3.8 и большего не надо.
frkbvfnjh; +1 Ответить
3. Поручик 4329 09.12.17 02:01 Сейчас в теме
А ещё меня удивляет на.. зачем возвращать хэш MD5 в виде двоичных данных. Это же касается серийного номера сертификата в соответствующей функции и некоторых других.
13. cool.vlad4 45 13.12.17 01:29 Сейчас в теме
(3) чтобы можно было с этими двоичными данными делать все что хочешь, если посмотришь как делают апи у всяких криптобиблиотек в частности, там все построено по принципу пайпа, ты можешь эти двоичные данные еще куда-нибудь запихнуть и не париться, принимает ли у тебя метод текстовое представление(скорее даже hex представление, о текстовом вообще молчу, поскольку это не комильфо по определению из-за кодировок), я именно поэтому в своей ВК делал возврат двоичных данных
6. bulpi 157 09.12.17 15:34 Сейчас в теме
Есть еще вариант :

ТипДвоичныеДанные = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "hexBinary");
ДвоичныеДанные = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ХешSHA1.ХешСумма);
Возврат ДвоичныеДанные.ЛексическоеЗначение;
HIVvich; mysm; Irwin; Danil.Potapov; pm74; caponid; saddy; IgKR; Strobe; Поручик; A_Max; frkbvfnjh; nporrep; +13 Ответить
11. frkbvfnjh 557 11.12.17 05:59 Сейчас в теме
(6) Это ваще бомба! От куда вы все это берете? С этим XDTO что только не делают, я видел даже регулярные выражения обрабатывают. Спасибо!
15. Поручик 4329 15.12.17 23:53 Сейчас в теме
(6) А я вот подумал и сделал в нашей конфе так же, на всякий случай. До того двоичные данные преобразовывал тупо строкой.
7. johnnyshut23 52 09.12.17 22:35 Сейчас в теме
Спасибо большое, полезно!
12. frkbvfnjh 557 11.12.17 06:00 Сейчас в теме
16. kuzyara 796 18.12.17 05:06 Сейчас в теме
Строка(ДвоичныеДанные) - так делать нельзя, т.к. съедаются #13#10

    // прочитаем двоичные данные в строку
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.Прочитать(ФайлДанных, "ISO-8859-1", "");
    ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
17. Synoecium 650 27.02.18 06:24 Сейчас в теме
(16) а почему они будут съедаться, двоичные данные представляются строкой в base16 виде и все символы там печатные.
Например,
тест64 = "DQkIExA=";
Сообщить(Строка(Base64Значение(тест64 )));

выдаст
0D 09 08 13 10
что соответствует исходной строке
18. nacsa 27.02.18 14:44 Сейчас в теме
(17) да, я тоже не понял этого.
19. andr2510 6 12.03.18 14:23 Сейчас в теме
21 век на дворе, а статья как никогда полезна оказалась.
В одночасье у людей по всей сети перестала запускаться буха. Причем именно падать. Вылетала на строке:
ОтпечатокHex = ПолучитьHexСтрокуИзДвоичныхДанных(Сертификат.Отпечаток); в общем модуле ПерсонализированныеПредложенияСервисовКлиент.
Причем в отладчике Отпечаток был обычными двоичными данными. В итоге заменил на ваш модуль.
Других путей решения найти не смог. Можно было удалить личные сертификаты пользователя, но это не вариант.

Спасибо 1С-у. Шикарные функции в платформу встраивает.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день

Программист 1C
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Программист 1С
Москва
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 80 000 руб. до 120 000 руб.
Полный день