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

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

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

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

Комментарии
Избранное Подписка Сортировка: Древо
1. apic 08.12.17 16:57 Сейчас в теме
Спасибо, теперь знаю как читать байты
2. Armando 1388 08.12.17 20:29 Сейчас в теме
Наверняка Вы пользовались СП, но не дочитали до методов ПолучитьДвоичныеДанныеИзСтроки и ПолучитьСтрокуИзДвоичныхДанных.
4. frkbvfnjh 554 09.12.17 06:48 Сейчас в теме
Можете написать как решить данную задачу с помощью этих функций (ПолучитьДвоичныеДанныеИзСтроки и ПолучитьСтрокуИзДвоичныхДанных)? У меня что-то "думки" не хватает, буду благодарен.
8. Armando 1388 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 554 11.12.17 05:55 Сейчас в теме
(8) АААААААААААААААААА, Спасибо Бро!!! Не знал о таком! Не жалею, что сделал публикацию, 5 минут позора, зато узнал то, что давно мучило и не узнал бы никогда этих элементарных вещей.
Danil.Potapov; +1 Ответить
5. bulpi 155 09.12.17 15:31 Сейчас в теме
(2)
Не нашел таких методов в СП. (8.3.9)
14. Поручик 4291 13.12.17 02:54 Сейчас в теме
(9) 8.3.10 не везде есть. Некоторые наши заказчики счастливо работают на 8.3.8 и большего не надо.
frkbvfnjh; +1 Ответить
3. Поручик 4291 09.12.17 02:01 Сейчас в теме
А ещё меня удивляет на.. зачем возвращать хэш MD5 в виде двоичных данных. Это же касается серийного номера сертификата в соответствующей функции и некоторых других.
13. cool.vlad4 45 13.12.17 01:29 Сейчас в теме
(3) чтобы можно было с этими двоичными данными делать все что хочешь, если посмотришь как делают апи у всяких криптобиблиотек в частности, там все построено по принципу пайпа, ты можешь эти двоичные данные еще куда-нибудь запихнуть и не париться, принимает ли у тебя метод текстовое представление(скорее даже hex представление, о текстовом вообще молчу, поскольку это не комильфо по определению из-за кодировок), я именно поэтому в своей ВК делал возврат двоичных данных
6. bulpi 155 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 554 11.12.17 05:59 Сейчас в теме
(6) Это ваще бомба! От куда вы все это берете? С этим XDTO что только не делают, я видел даже регулярные выражения обрабатывают. Спасибо!
15. Поручик 4291 15.12.17 23:53 Сейчас в теме
(6) А я вот подумал и сделал в нашей конфе так же, на всякий случай. До того двоичные данные преобразовывал тупо строкой.
7. johnnyshut23 50 09.12.17 22:35 Сейчас в теме
Спасибо большое, полезно!
12. frkbvfnjh 554 11.12.17 06:00 Сейчас в теме
16. kuzyara 774 18.12.17 05:06 Сейчас в теме
Строка(ДвоичныеДанные) - так делать нельзя, т.к. съедаются #13#10

    // прочитаем двоичные данные в строку
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.Прочитать(ФайлДанных, "ISO-8859-1", "");
    ТекстФайла = ТекстовыйДокумент.ПолучитьТекст();
17. Synoecium 632 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С
Тюмень
зарплата от 65 000 руб.
Полный день

Консультант 1С (Бухгалтерия)
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

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

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

Консультант 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день