1c преобразовать в hex

Обновлено: 03.07.2024

Как перевести средствами встроенного языка 1С 10-ное число в HEX ?

Ну и заодно - в BIN, в OCT и в другие системы исчисления ?

Пришлось достать учебники по математике и написать эту статью.

В результате - получил 2ва алгоритма:

- первый : с рекурсивными вызовами после остатка от деления по основанию Х

- второй : через логарифмы с циклом

Коротко о главном:

1) первый алгоритм - получился быстрее. Вот результаты:

2) второй алгоритм (если честно) был подсмотрен в реализации SQL-функции для _IdToStr
и модифицирован для универсальности (не только для основания 36, а для любого основания).
Эта SQL-функция широко используется в сообществе 1С++
(К сожалению, автора-первооткрывателя : не знаю, поэтому - поклон ему и всем участникам проекта )

Алгоритмы (что во вложении) написаны для 1С.7.7

Алгоритмы универсальные: поэтому легко переделать для 1С8.* с учетом особенностей языков.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Понадобилась функция для перевода из одного основания в другое.
Сначала написал свою, потом скачал это.

Вариант 2 содержит ошибку.
Когда число = Основание в степени Н, то происходит лишняя итерация.
Ошибка тут:
Знч = цел(Ln(ч10)/Ln(чОснование)) +1
Для i=1 По Знч-1 Цикл
чСтепень = чСтепень*чОснование;
КонецЦикла;

Вот демонстрация:
Вариант 1: время = 0.475, КвоИтераций=10000
1679616 = 19A100
1679616 = 110011010000100000000
1679616 = 6320400
1679616 = 10000

Вариант 2: время = 0.465, КвоИтераций=10000
1679616 = 19A100
1679616 = 110011010000100000000
1679616 = 6320400
1679616 = 000

Вариант 3: время = 0.046, КвоИтераций=10000
1679616 = 19A100
1679616 = 110011010000100000000
1679616 = 6320400
1679616 = 10000

Благо это самый тормозной алгоритм и его вряд ли кто использовал.
Просто будьте внимательнее.

SeverinPasha --> SeverinPasha



Просмотр профиля Итак, я уже писал в одной теме о подключении и получении данных с магнитного ридера. У меня это удалось, вот только данные я получаю непонятно какие. Вот код


Если учесть, если на карте имеется номер 0000255740(десятиричный) и 039,01335(некий ТЕКСТОВЫЙ код).
Помогите связать результат вывода с данными которые по идее должны выводиться(написаны на карте) andr_andrey --> andr_andrey



Просмотр профиля SeverinPasha @ Сегодня, 13:29 ,
Два байта - мало, возможно вы не всю посылку приняли. SeverinPasha --> SeverinPasha



Просмотр профиля Значится нашёл я документацию своей считки. Узрил необходимую скорость считывания данных и настройки, окей.

Потом решил все это затестить на ComRead. Получил следующие данные с карты

Окей, после чего решил вставить такие же настройки считки в свою обработку в 1с

И в итоге рпи запуске получаю следующие данные. Каждой паре соответствует свой элемент массива в 10-чной системе.

Но вся проблема остаётся в том, что ну не представляю совсем как эти данные перевести в те, которые указаны на карте, а именно; 0000188041 и 002,56969
Код программы чуть что указан выше andr_andrey --> andr_andrey



Просмотр профиля

И в итоге рпи запуске получаю следующие данные. Каждой паре соответствует свой элемент массива в 10-чной системе.

Но вся проблема остаётся в том, что ну не представляю совсем как эти данные перевести в те, которые указаны на карте, а именно; 0000188041 и 002,56969
Код программы чуть что указан выше

188041 (10) = 02DE89 (16)

137 (10) = 89 (16)
222 (10) = DE (16)
2 (10) = 2 (16)

awp --> awp



Просмотр профиля

andr_andrey @ Сегодня, 16:07 ,

Не все так просто. Может поможет:

[необходимо зарегистрироваться для просмотра ссылки]
[необходимо зарегистрироваться для просмотра ссылки]
[необходимо зарегистрироваться для просмотра ссылки]
[необходимо зарегистрироваться для просмотра ссылки]

конвертер Wiegand26 to HEX [необходимо зарегистрироваться для просмотра ссылки]

Vladal --> Vladal



Просмотр профиля

Вопросы по Python

Программирование и разработка

Основание шестнадцатеричного числа равно 16, и мы можем представить строку в шестнадцатеричном формате с помощью префикса 0x.

Мы можем преобразовать строку в шестнадцатеричную, используя следующие методы:

  • Использование метода hex (n)
  • Использование метода encode ()
  • Использование метода literal_eval ()

Метод 1: использование hex ()

Мы можем преобразовать строку в шестнадцатеричную с помощью метода hex (). Метод hex () принимает параметр в целочисленной форме, и для этого сначала мы должны преобразовать строку в целое число, а затем передать это значение методу hex (), как показано ниже:

Строка 3: Мы создали строку для демонстрации.

Строка 6: мы передаем эту строку методу int () с базой 16. Теперь этот метод int () преобразует строку в шестнадцатеричное целочисленное значение.

Строка 9: Мы печатаем значение, которое получаем после преобразования строки в целое шестнадцатеричное число.

Строка 10: Мы также печатаем тип значения, чтобы подтвердить, что строка теперь имеет целочисленную форму.

Строка 12: мы знаем, что встроенный метод hex (n) принимает целочисленное значение, преобразуя целое число в шестнадцатеричную строку. Вот почему нам нужно преобразовать строку в целое число, чтобы передать ее в метод hex (). Мы передали это значение base16INT методу hex () и получили шестнадцатеричную строку hex_value.

Строка 13: Мы печатаем это преобразованное шестнадцатеричное значение.

Строка 16: мы печатаем тип преобразованного шестнадцатеричного значения, которое показывает в выводе, что это строковый тип.

Итак, теперь мы преобразовали строку в шестнадцатеричное значение.

Метод 2: преобразовать строку в шестнадцатеричное с помощью encode ()

Мы также можем преобразовать обычную строку в шестнадцатеричную строку, в которой нет шестнадцатеричных символов. Для этого мы должны преобразовать строку в байт с помощью метода encode (), а затем мы можем преобразовать строку в шестнадцатеричную, как показано ниже:

Строки с 4 по 7: мы создали строку, в которой нет шестнадцатеричных символов. А затем преобразуйте эти строки в байты с помощью метода encode (). Затем мы печатаем эти байты, которые видим в строке вывода номер 1.

Строки с 10 по 13: мы вызываем метод hex () с помощью оператора точки, и теперь байты преобразуются в требуемое шестнадцатеричное строковое значение. Чтобы подтвердить тип результирующей строки, мы просто печатаем строку номер 13, и вывод показывает, что это строка шестнадцатеричного типа.

Метод 3. Использование метода ast.literal_eval ()

Мы также можем преобразовать строку в целое число с помощью библиотечного метода ast literal_eval. Этот метод также преобразует строку в целое число, чтобы использовать метод hex () для преобразования строки в шестнадцатеричную строку. Но этот метод принимает только символы префикса 0x.

Строки 2–10 : мы импортируем метод literal_eval () из библиотеки ast. Затем мы создаем строку с префиксом 0x. Затем мы передали эту строку методу literal_eval () и преобразовали ее в целое число. Чтобы подтвердить, что вывод находится в целочисленной форме, мы печатаем его в строке номер 9. Мы также печатаем тип вывода, который показывает, что это целое число.

Строки с 13 по 17: нам известен встроенный метод hex (n), который принимает целочисленное значение и преобразует целое число в шестнадцатеричную строку. Вот почему нам нужно преобразовать строку в целое число, чтобы передать ее в метод hex (). Мы передали это значение convert_str (integer) методу hex () и получили hex_value, строку в шестнадцатеричном формате. Также мы печатаем это преобразованное шестнадцатеричное значение. Мы также печатаем тип преобразованного шестнадцатеричного значения, который показывает, что это шестнадцатеричный строковый тип.

Исключение ошибки (TypeError):

Иногда мы получаем ошибки при преобразовании строки в шестнадцатеричную. Причина в том, что метод hex () принимает в качестве параметра только целочисленное значение.

ЗАключение

Итак, мы видели различные методы преобразования строки в шестнадцатеричную строку в нижнем регистре. Метод hex () очень популярен благодаря простоте использования. Но иногда мы хотим преобразовать строку без использования префикса 0x, поэтому в этом случае мы можем использовать метод bytes encode (), как мы уже видели в статье.

Вопросы по Python

Программирование и разработка

Основание шестнадцатеричного числа равно 16, и мы можем представить строку в шестнадцатеричном формате с помощью префикса 0x.

Мы можем преобразовать строку в шестнадцатеричную, используя следующие методы:

  • Использование метода hex (n)
  • Использование метода encode ()
  • Использование метода literal_eval ()

Метод 1: использование hex ()

Мы можем преобразовать строку в шестнадцатеричную с помощью метода hex (). Метод hex () принимает параметр в целочисленной форме, и для этого сначала мы должны преобразовать строку в целое число, а затем передать это значение методу hex (), как показано ниже:

Строка 3: Мы создали строку для демонстрации.

Строка 6: мы передаем эту строку методу int () с базой 16. Теперь этот метод int () преобразует строку в шестнадцатеричное целочисленное значение.

Строка 9: Мы печатаем значение, которое получаем после преобразования строки в целое шестнадцатеричное число.

Строка 10: Мы также печатаем тип значения, чтобы подтвердить, что строка теперь имеет целочисленную форму.

Строка 12: мы знаем, что встроенный метод hex (n) принимает целочисленное значение, преобразуя целое число в шестнадцатеричную строку. Вот почему нам нужно преобразовать строку в целое число, чтобы передать ее в метод hex (). Мы передали это значение base16INT методу hex () и получили шестнадцатеричную строку hex_value.

Строка 13: Мы печатаем это преобразованное шестнадцатеричное значение.

Строка 16: мы печатаем тип преобразованного шестнадцатеричного значения, которое показывает в выводе, что это строковый тип.

Итак, теперь мы преобразовали строку в шестнадцатеричное значение.

Метод 2: преобразовать строку в шестнадцатеричное с помощью encode ()

Мы также можем преобразовать обычную строку в шестнадцатеричную строку, в которой нет шестнадцатеричных символов. Для этого мы должны преобразовать строку в байт с помощью метода encode (), а затем мы можем преобразовать строку в шестнадцатеричную, как показано ниже:

Строки с 4 по 7: мы создали строку, в которой нет шестнадцатеричных символов. А затем преобразуйте эти строки в байты с помощью метода encode (). Затем мы печатаем эти байты, которые видим в строке вывода номер 1.

Строки с 10 по 13: мы вызываем метод hex () с помощью оператора точки, и теперь байты преобразуются в требуемое шестнадцатеричное строковое значение. Чтобы подтвердить тип результирующей строки, мы просто печатаем строку номер 13, и вывод показывает, что это строка шестнадцатеричного типа.

Метод 3. Использование метода ast.literal_eval ()

Мы также можем преобразовать строку в целое число с помощью библиотечного метода ast literal_eval. Этот метод также преобразует строку в целое число, чтобы использовать метод hex () для преобразования строки в шестнадцатеричную строку. Но этот метод принимает только символы префикса 0x.

Строки 2–10 : мы импортируем метод literal_eval () из библиотеки ast. Затем мы создаем строку с префиксом 0x. Затем мы передали эту строку методу literal_eval () и преобразовали ее в целое число. Чтобы подтвердить, что вывод находится в целочисленной форме, мы печатаем его в строке номер 9. Мы также печатаем тип вывода, который показывает, что это целое число.

Строки с 13 по 17: нам известен встроенный метод hex (n), который принимает целочисленное значение и преобразует целое число в шестнадцатеричную строку. Вот почему нам нужно преобразовать строку в целое число, чтобы передать ее в метод hex (). Мы передали это значение convert_str (integer) методу hex () и получили hex_value, строку в шестнадцатеричном формате. Также мы печатаем это преобразованное шестнадцатеричное значение. Мы также печатаем тип преобразованного шестнадцатеричного значения, который показывает, что это шестнадцатеричный строковый тип.

Исключение ошибки (TypeError):

Иногда мы получаем ошибки при преобразовании строки в шестнадцатеричную. Причина в том, что метод hex () принимает в качестве параметра только целочисленное значение.

ЗАключение

Итак, мы видели различные методы преобразования строки в шестнадцатеричную строку в нижнем регистре. Метод hex () очень популярен благодаря простоте использования. Но иногда мы хотим преобразовать строку без использования префикса 0x, поэтому в этом случае мы можем использовать метод bytes encode (), как мы уже видели в статье.

Читайте также: