Получение кода символа в кодировке CP1251 из 1С

Иногда, например для получения контрольной суммы строки, необходимо получить код каждого символа. В 1С есть встроенная функция КодСимвола, но она возвращает код в кодировке UTF-8. Ниже приведен пример, как получить код в другой кодировке, в том числе CP-1251. 

Функция ПолучитьКод(Символ)

    Код = HexToDec(ПолучитьДвоичныеДанныеИзСтроки(Символ, КодировкаТекста.ANSI, Ложь));

КонецФункции

Функция HexToDec(Знач _Число) Экспорт

   СтрокаHEX = СокрЛП(_Число);
   ДлинаHEX = СтрДлина(СтрокаHEX);
   ДесятичноеЧисло = 0;

      Для Сч = 0 По ДлинаHEX - 1 Цикл

      Множитель = Pow(16, Сч);
      НехСимвол = Сред(СтрокаHEX, ДлинаHEX - Сч, ДлинаHEX - Сч);

      Если НехСимвол = "A" Тогда
         ДесятичноеЧисло = ДесятичноеЧисло + 10 * Множитель;
      ИначеЕсли НехСимвол = "B" Тогда
         ДесятичноеЧисло = ДесятичноеЧисло + 11 * Множитель;
      ИначеЕсли НехСимвол = "C" Тогда
         ДесятичноеЧисло = ДесятичноеЧисло + 12 * Множитель;
      ИначеЕсли НехСимвол = "D" Тогда
         ДесятичноеЧисло = ДесятичноеЧисло + 13 * Множитель;
      ИначеЕсли НехСимвол = "E" Тогда
         ДесятичноеЧисло = ДесятичноеЧисло + 14 * Множитель;
      ИначеЕсли НехСимвол = "F" Тогда
         ДесятичноеЧисло = ДесятичноеЧисло + 15 * Множитель;
      Иначе

         Попытка
            ДесятичноеЧисло = ДесятичноеЧисло + Число(НехСимвол) * Множитель;
         Исключение;
            ОбщегоНазначенияКлиентСервер.СообщитьОбОшибке(ОписаниеОшибки());
         КонецПопытки

      КонецЕсли;

   КонецЦикла;

   Возврат ДесятичноеЧисло;

КонецФункции

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*

code