|
Перевод из двоичной системы в шестнадцатиричную | ☑ | ||
---|---|---|---|---|
0
1сПупс
01.08.22
✎
16:36
|
хай, перевожу с помощью функций:
Функция Из_Любой_В_10(Знач Значение="0",Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат(0) КонецЕсли; Значение=СокрЛП(Значение); Если Значение="0" Тогда Возврат(0) КонецЕсли; //Результат=0; Результат=""; Длина=СтрДлина(Значение); Для Х=1 По Длина Цикл М=1; Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла; Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М; КонецЦикла; Возврат Окр(Результат); КонецФункции Функция Из_10_В_Любую(Знач Значение=0,Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат("") КонецЕсли; Значение=Число(Значение); Если Значение<=0 Тогда Возврат("0") КонецЕсли; Значение=Цел(Значение); Результат=""; Пока Значение>0 Цикл Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%Нотация+1,1)+Результат; Значение=Цел(Значение/Нотация) ; КонецЦикла; Возврат Результат; КонецФункции 1. сначала из 2ичной в 10 потом из 10 в 16 ричную. 2. когда есть лидирующие нули, типа 00000001001000101000111101001100101011110101100001111010100000010111100101011100000100000010000101101111000011100101101000100001 этого на выходе 16ричное число имеет длину не 32 символа, а меньше. Как это победить? |
|||
1
1сПупс
01.08.22
✎
16:37
|
имею с двоичного числа выше такое 16ричное число: 1228F4CAF587A81795C10216F0E5A21
|
|||
2
RomanYS
01.08.22
✎
16:46
|
(0) каждые 4 двоичных разряда дают один шестнадцатиричный. Что ты побеждать собрался непонятно. Если нужны лидирующие нули - просто добавь их
|
|||
3
1сПупс
01.08.22
✎
16:47
|
(2) просто странно почему эти 2 функции дают не 32символьное 16ричное число а 31.
|
|||
4
1сПупс
01.08.22
✎
16:48
|
https://ru.wikipedia.org/wiki/Шестнадцатеричная_система_счисления#:~:text=Для%20перевода%20многозначного%20двоичного%20числа,0101%201010%200011%20%3D%205A3 по идее можно создать функцию, которая разделит двоичное число на тетрады, и по заданным значениям переводить число из двоичного в 16ричное, райт?
|
|||
5
Garykom
гуру
01.08.22
✎
16:49
|
(3) Чтобы это понять надо слегка подучить обычную математику
|
|||
6
RomanYS
01.08.22
✎
16:50
|
(3) так ты перевёл в Число (тип такой в 1с) - все лидирующие нули потерялись и это правильно
|
|||
7
RomanYS
01.08.22
✎
16:51
|
(4) так и переводи тетрадами без (десятичного) числа в промежутке
|
|||
8
1сПупс
01.08.22
✎
16:52
|
(5) тут скорее логика, первая тетрада из 4-х нулей (0000) должны преобразоваться в 0, а из этих функций 0 теряется, идет сразу вторая тетрада (0001), преобразующаяся в 1.
|
|||
9
Garykom
гуру
01.08.22
✎
16:52
|
(5)+ Для совсем непонимающих да еще со склерозом:
1. Двоичное число в виде строки "00000001..." в 10-чное число в виде числа даст "обнуление" лишних нулей впереди. Примерно как Число("01") = 1. 2. 10-чное число превращая в 16-ричное получим его без лишних нулей впереди 3. Если нужны нули то добавь их до нужного числа разрядов. Простым циклом. |
|||
10
Garykom
гуру
01.08.22
✎
16:58
|
(9)+ Хотя в 1С можно обойтись Формат(Строка16, "ЧЦ=32; ЧВН=")
|
|||
11
Garykom
гуру
01.08.22
✎
17:00
|
(10) гм это я погорячился, это только для 2-чных сработает
походу в 1С нет функции дополнения для строк? |
|||
12
1Сергей
01.08.22
✎
17:02
|
(11) Прав("00000000000000000000000000000000"+НЕХ, 32)
|
|||
13
Fish
01.08.22
✎
17:06
|
(11) В БСП есть СтроковыеФункцииКлиентСервер.ДополнитьСтроку
|
|||
14
RomanYS
01.08.22
✎
17:08
|
В платформе есть методы
ЧислоИзДвоичнойСтроки ЧислоИзШестнадцатеричнойСтроки обратных правда не нашёл |
|||
15
ДНН
01.08.22
✎
17:12
|
(0) Число10 = ЧислоИзДвоичнойСтроки("0b" + ТвоеЧислоВДвоичнойСС);
Поток = Новый ПотокВПамяти(); Запись = Новый ЗаписьДанных(Поток); Запись.ЗаписатьЦелое64(Число10, ПорядокБайтов.BigEndian); Запись.Закрыть(); ДД = Поток.ЗакрытьИПолучитьДвоичныеДанные(); Hex = ПолучитьHexСтрокуИзДвоичныхДанных(ДД); Сообщить(Hex); |
|||
16
Garykom
гуру
01.08.22
✎
17:13
|
(12) Количество "0" хорошо бы не константой
|
|||
17
Garykom
гуру
01.08.22
✎
17:42
|
(16)+ через Формат как раз прекрасно выйдет
|
|||
18
Garykom
гуру
01.08.22
✎
17:43
|
Прав(Формат(0, "ЧЦ=32; ЧВН=")+НЕХ, 32) ?
|
|||
19
RomanYS
01.08.22
✎
17:50
|
с 0 не выйдет, его представление должно задаваться явно. Всё равно велосипед понадобится)))
|
|||
20
1сПупс
01.08.22
✎
18:16
|
(15) (15) Недопустимое значение числа
{ВнешняяОбработка.ГенераторСидФразыBitcoin.Форма.Форма.Форма(44)}: Запись.ЗаписатьЦелое64(Число10, ПорядокБайтов.BigEndian); {ВнешняяОбработка.ГенераторСидФразыBitcoin.Форма.Форма.Форма(163)}: Команда1НаСервере(); по причине: Недопустимое значение числа |
|||
21
RomanYS
01.08.22
✎
18:23
|
*(19) к (18)
выражение вернёт пустую строку (представление 0 по-умолчанию) |
|||
22
Гений 1С
гуру
01.08.22
✎
19:17
|
Если че, у меня в библиотеке Функций были функции по конвертации в из
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |