|   |   | 
| 
 | Конвертация из 16 ричной системы в двоичную | ☑ | ||
|---|---|---|---|---|
| 0
    
        Лентаf 09.06.22✎ 14:47 | 
        Нашел сайтик конвертации
 Hex to Binary converter https://www.rapidtables.com/convert/number/hex-to-binary.html Почему когда конвертируешь из 16ричной в двоичную и из 16 ричной в 10ю и потом в двоичную разные результаты? Как в 1с написать конвертацию из 16 ричной системы в двоичную? | |||
| 1
    
        yopQua 09.06.22✎ 14:48 | 
        из 10 в 16 в гугле
 аналогично двочиная | |||
| 2
    
        asady 09.06.22✎ 14:48 | 
        (0) сам напиши     | |||
| 3
    
        Ryzeman 09.06.22✎ 14:48 | 
        >>Как в 1с написать конвертацию из 16 ричной системы в двоичную?
 Дожили) Программист с 6летним стажем (на мисте по крайней мере) | |||
| 4
    
        Krendel 09.06.22✎ 14:49 | 
        (0) Видимо всем пофигу, в т.ч. и разработчику сайта     | |||
| 5
    
        asady 09.06.22✎ 14:49 | 
        16-ти ричное число = 4 бита - полубайт
 отсюда и пляши | |||
| 6
    
        Лентаf 09.06.22✎ 14:49 | 
        (2) а как?     | |||
| 7
    
        Ryzeman 09.06.22✎ 14:49 | 
        (0) ProTip: калькулятор винды умеет переводить если тебе просто надо пару чисел проверить.     | |||
| 8
    
        Лентаf 09.06.22✎ 14:49 | 
        Число в шестнадцатеричной системе счисления состоит из цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (где A, B, C, D, E и F равны 10, 11, 12, 13, 14 и 15 соответственно).
 Например 5B09F3 — это число в шестнадцатеричной системе счисления. Для перевода числа из шестнадцатеричной системы счисления в двоичную систему необходимо каждую цифру шестнадцатеричного числа заменить соответствующей ей тетрадой (4 бита) из таблицы перевода, приведенной ниже. Перевод из шестнадцатеричной в двоичную систему счисления на Си - vscode.ru Приведем пример. Переведем число A50E7 в двоичную систему счисления. Для этого заменим каждую его цифру соответствующей ей тетрадой из таблицы перевода. A50E7(16) = 10100101000011100111(2). Для удобочитаемости разные тетрады выделены разным начертанием шрифта. | |||
| 9
    
        Лентаf 09.06.22✎ 14:50 | 
        (7) мне надо на 1с     | |||
| 10
    
        asady 09.06.22✎ 14:50 | 
        (5) ну ты понял не 16-ричное число а 16-ричная цифра = 0-9, A-F     | |||
| 11
    
        Krendel 09.06.22✎ 14:51 | 
        (9) Тебе тз написать?     | |||
| 12
    
        yopQua 09.06.22✎ 14:52 | 
        что за проблема, 100 раз уже это написали     | |||
| 13
    
        Ryzeman 09.06.22✎ 14:54 | 
        (9) ну так (2) 
 Это мало того, что задачка 7го класса на третьем уроке по информатике, так и просто первая ссылка гугла, если ты настолько ленив >< | |||
| 14
    
        yopQua 09.06.22✎ 14:55 | 
        он настолько ленив, что лениться ему лень     | |||
| 15
    
        Chai Nic 09.06.22✎ 14:56 | 
        (13) Можно обратиться в фирму 1с, чтобы они в очередном релизе платформы включили функции по преобразованию систем счислений для чисел, предоставленных строкой. Ведь сделали же функции ЧислоИзДвоичнойСтроки и ЧислоИзШестнадцатеричнойСтроки. Что им мешает?)     | |||
| 16
    
        banco 09.06.22✎ 14:56 | 
        Функция ПреобразоватьДесятичноеЧислоВШестнадцатиричнуюСистемуСчисления(Знач ДесятичноеЧисло)
 Результат = ""; Пока ДесятичноеЧисло > 0 цикл ОстатокОтДеления = ДесятичноеЧисло % 16; ДесятичноеЧисло = (ДесятичноеЧисло - ОстатокОтДеления) / 16; Результат = Сред("0123456789abcdef", ОстатокОтДеления + 1, 1) + Результат; КонецЦикла; Возврат Результат; КонецФункции Функция ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(Знач Значение) Значение = НРег(Значение); ДлинаСтроки = СтрДлина(Значение); Результат = 0; Для НомерСимвола = 1 По ДлинаСтроки Цикл Результат = Результат * 16 + Найти("0123456789abcdef", Сред(Значение, НомерСимвола, 1)) - 1; КонецЦикла; Возврат Формат(Результат, "ЧГ=0"); КонецФункции | |||
| 17
    
        Лентаf 09.06.22✎ 15:08 | 
        Функция ШестнадцатиричноеВДвоичное(Знач Стр2) Экспорт
 Стр = СокрЛП(Стр2); Рез=""; Для н=1 по СтрДлина(Стр) Цикл Буква = Сред(Стр,н,1); Если Буква = "0" Тогда Рез=Рез+"0000"; ИначеЕсли Буква = "1" Тогда Рез=Рез+"0001"; ИначеЕсли Буква = "2" Тогда Рез=Рез+"0010"; ИначеЕсли Буква = "3" Тогда Рез=Рез+"0011"; ИначеЕсли Буква = "4" Тогда Рез=Рез+"0100"; ИначеЕсли Буква = "5" Тогда Рез=Рез+"0101"; ИначеЕсли Буква = "6" Тогда Рез=Рез+"0110"; ИначеЕсли Буква = "7" Тогда Рез=Рез+"0111"; ИначеЕсли Буква = "8" Тогда Рез=Рез+"1000"; ИначеЕсли Буква = "9" Тогда Рез=Рез+"1001"; ИначеЕсли Буква = "A" Тогда Рез=Рез+"1010"; ИначеЕсли Буква = "B" Тогда Рез=Рез+"1011"; ИначеЕсли Буква = "C" Тогда Рез=Рез+"1100"; ИначеЕсли Буква = "D" Тогда Рез=Рез+"1101"; ИначеЕсли Буква = "E" Тогда Рез=Рез+"1110"; ИначеЕсли Буква = "F" Тогда Рез=Рез+"1111"; Иначе Сообщить("ошибка!"); КонецЕсли; //Рез=Рез+Число(Сред(Стр,н,1)); КонецЦикла; Возврат Рез; КонецФункции Я вот тут написал, но мне кажется я что-то не учел: длина бинарного значения больше чем в калькуляторе. | |||
| 18
    
        Ryzeman 09.06.22✎ 15:11 | 
        (17) используй (16) уже... Добавь параметром основание и получишь универсальную функцию, хоть в двоичную, хоть в троичную, хоть в 16ричную.     | |||
| 19
    
        asady 09.06.22✎ 15:11 | 
        function HexToBinary(strHexValue)
 Hex = new Map; Hex.insert("0","0000"); Hex.insert("1","0001"); Hex.insert("2","0010"); Hex.insert("3","0011"); Hex.insert("4","0100"); Hex.insert("5","0101"); Hex.insert("6","0110"); Hex.insert("7","0111"); Hex.insert("8","1000"); Hex.insert("9","1001"); Hex.insert("A","1010"); Hex.insert("B","1011"); Hex.insert("C","1100"); Hex.insert("D","1101"); Hex.insert("E","1110"); Hex.insert("F","1111"); num = strlen(strHexValue); res = ""; for i=1 to num do bin = Hex.get(Upper(mid(strHexValue,i,1))); if bin = undefined then res = ""; break; endif; res = bin + res; enddo; return res; endfunction | |||
| 20
    
        asady 09.06.22✎ 15:13 | 
        (19)+
 oops... res = res + bin; | |||
| 21
    
        Лентаf 09.06.22✎ 15:14 | 
        (19) это язык 1с?     | |||
| 22
    
        yopQua 09.06.22✎ 15:17 | 
        (21) ну да     | |||
| 23
    
        yopQua 09.06.22✎ 15:17 | 
        а что не так?     | |||
| 24
    
        Gary417 09.06.22✎ 15:18 | 
        (9) а зачем? ты хочешь установленные биты узнавать? это надо другим способом делать     | |||
| 25
    
        Лентаf 09.06.22✎ 15:19 | 
        (18) у меня были 2 функции 
 Функция Из_Любой_В_10(Знач Значение="0",Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат(0) КонецЕсли; Значение=СокрЛП(Значение); Если Значение="0" Тогда Возврат(0) КонецЕсли; Результат=0; Длина=СтрДлина(Значение); Для Х=1 По Длина Цикл М=1; Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла; Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М; КонецЦикла; Возврат Окр(Результат); КонецФункции Функция Из_10_В_Любую(Знач Значение=0,Нотация=36) Экспорт Если Нотация<=0 Тогда Возврат("") КонецЕсли; Значение=Число(Значение); Если Значение<=0 Тогда Возврат("0") КонецЕсли; Значение=Цел(Значение); Результат=""; Пока Значение>0 Цикл Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%Нотация+1,1)+Результат; Значение=Цел(Значение/Нотация) ; КонецЦикла; Возврат Результат; КонецФункции проблема в том, что когда переводишь из 16ричн в двоичную приходится сначала из 16рич в 10тичн потом в двоичн, а это не равно из шестнадцатиричной в двоичную. | |||
| 26
    
        Gary417 09.06.22✎ 15:19 | 
        (25) пример напиши какие числа не получаются     | |||
| 27
    
        Garykom гуру 09.06.22✎ 15:19 | 
        (25) ыыы     | |||
| 28
    
        Chai Nic 09.06.22✎ 15:20 | 
        "когда переводишь из 16ричн в двоичную приходится сначала из 16рич в 10тичн потом в двоичн, а это не равно из шестнадцатиричной в двоичную"
 Вы открыли новое слово в арифметике. В Академию Наук уже писали? | |||
| 29
    
        hhhh 09.06.22✎ 15:20 | 
        (17) и чего, не работает?     | |||
| 30
    
        DES 09.06.22✎ 15:21 | 
        (25) Покажи примеры значение и результат. Пожалуйста!     | |||
| 31
    
        Ryzeman 09.06.22✎ 15:22 | 
        (25) Это к вопросу "Вам шашечки или ехать"?
 Ты в принципе ограничен тем, что у тебя 1с как платформа умеет производить арифметические действия в десятеричной системе счисления. Можно бы было делить двоичные или другие числа - можно было бы написать нормальный алгоритм без промежуточного перевода из-в десятиричную. (17) Этот изврат ничем не лучше. | |||
| 32
    
        Garykom гуру 09.06.22✎ 15:28 | 
        (31) "1с как платформа умеет производить арифметические действия в десятеричной системе счисления"
 муахаха | |||
| 33
    
        asady 09.06.22✎ 15:29 | ||||
| 34
    
        Лентаf 09.06.22✎ 15:30 | 
        (31) а как решить следующую задачу: Есть код из 128 символов, 
 00111011100011000111001000111010011111100011010110101111010000000010001101111100010000101010101000000100100010101000111110011100 он в двоичной системе, тебе надо его перевести в шестнадцатиричную систему юзаю калькулятор https://www.rapidtables.com/convert/number/decimal-to-binary.html перевел в 2ичн: 000100010001000000010001000100000000000000010001000000000000000100010001000000000001000000000000000100010001000000010000000000010001000100010001000100000000000000010001000000010000000100010000000100000001000100010001000000010000000000000000000000000000000000010000000000000001000100000001000100010001000100000000000000010000000000000000000100000001000000010000000100000001000000000000000000000000000100000000000100000000000000010000000100000001000000000000000100010001000100010000000000010001000100000000 и в 10тичн: 3490817467789548012842093518532199172189570495389545465683046220553146356736125986424954194314627622297852127103631343854361896708588849667207155749120 Теперь пробую перевести из 10тичн в двоичн (для проверки) 100010001000000010001000100000000000000010001000000000000000100010001000000000001000000000000000100010001000000010000000000010001000100010001000100000000000000010001000000010000000100010000000100000001000100010001000000010000000000000000000000000000000000010000000000000001000100000001000100010001000100000000000000010000000000000000000100000001000000010000000100000001000000000000000000000000000100000000000100000000000000010000000100000001000000000000000100010001000100010000000000010001000100000000 итог не равен, почему так? | |||
| 35
    
        Chai Nic 09.06.22✎ 15:35 | 
        (34) Вы похоже своими мегачислами переполнили буфер у этого конвертора)     | |||
| 36
    
        Gary417 09.06.22✎ 15:35 | 
        (34) <итог не равен, почему так?>
 ты не заметил что 000100010001000000010001000100000000000000010001000000000000000100010001000000000001000000000000000100010001000000010000000000010001000100010001000100000000000000010001000000010000000100010000000100000001000100010001000000010000000000000000000000000000000000010000000000000001000100000001000100010001000100000000000000010000000000000000000100000001000000010000000100000001000000000000000000000000000100000000000100000000000000010000000100000001000000000000000100010001000100010000000000010001000100000000 и 100010001000000010001000100000000000000010001000000000000000100010001000000000001000000000000000100010001000000010000000000010001000100010001000100000000000000010001000000010000000100010000000100000001000100010001000000010000000000000000000000000000000000010000000000000001000100000001000100010001000100000000000000010000000000000000000100000001000000010000000100000001000000000000000000000000000100000000000100000000000000010000000100000001000000000000000100010001000100010000000000010001000100000000 на самом деле одно и тоже? | |||
| 37
    
        Gary417 09.06.22✎ 15:35 | 
        во втором номере у тебя просто трех лидирующих нулей нет     | |||
| 38
    
        Gary417 09.06.22✎ 15:37 | 
        тебе надо просто добавлять нули впереди до требуемой длинны     | |||
| 39
    
        Лентаf 09.06.22✎ 15:39 | 
        (37) в том то и дело, надо чтобы не обрезало.     | |||
| 40
    
        Garykom гуру 09.06.22✎ 15:39 | 
        (37) он меня этим добил     | |||
| 41
    
        Garykom гуру 09.06.22✎ 15:40 | 
        (39) ну так напиши свой калькулятор "чтобы не обрезало"     | |||
| 42
    
        Garykom гуру 09.06.22✎ 15:40 | 
        а то ведь сложно понять что число 1, 01, 001 и т.д. это тоже самое ))     | |||
| 43
    
        Ryzeman 09.06.22✎ 15:41 | 
        (32) в 1с можно троичное число поделить на другое? Мне правда интересно, просвети, пожалуйста.     | |||
| 44
    
        Йохохо 09.06.22✎ 15:44 | 
        (43) логарифм есть, дели
 (0) решать примеры сайта который путает хекс и хексадецимал такое себе | |||
| 45
    
        Krendel 09.06.22✎ 15:56 | 
        (42) веселее когда он сравнивает 100 и 001     | |||
| 46
    
        vbus 09.06.22✎ 16:25 | 
        Я сосчитал
 bx00111011100011000111001000111010011111100011010110101111010000000010001101111100010000101010101000000100100010101000111110011100= hx3B8C723A7E35AF40237C42AA048A8F9C | |||
| 47
    
        DES 09.06.22✎ 17:02 | 
        (34) берешь код, режешь с конца по 4 символа и кодируешь своей кодировклй и складываешь строку слева     | |||
| 48
    
        NorthWind 09.06.22✎ 19:54 | 
        (44) > решать примеры сайта который путает хекс и хексадецимал такое себе
 а первое не есть сокращение от второго? | |||
| 49
    
        NorthWind 09.06.22✎ 19:57 | 
        Так-то я отдаю себе отчет, что слова hex и hexadecimal в английском языке означают разное. Но в контексте, даже в литературе, не говоря уже про компьютерный сленг, hex обычно используется именно как сокращение от hexadecimal.     | |||
| 50
    
        ДедМорроз 09.06.22✎ 21:14 | 
        Во-первых,нужно не забывать отбрасывать нули в начале полученного числа,так как иначе у вас 1в начале переводится в 0001.
 Во-вторых,обратный перевод нужно начинать с конца,отсчитывая по 4 двоичных цифры,а если их меньше,то заменять старшие нулями. Во-вторых,никакой десятичной системы у нас нет,пока мы не выводим число,так как внутреннее представление числа явно не десятичное. | |||
| 51
    
        Bigbro 10.06.22✎ 04:25 | 
        "Почему когда конвертируешь из 16ричной в двоичную и из 16 ричной в 10ю и потом в двоичную разные результаты?"
 потому что писали такие же как ты двоечники. что за позор блин.. ну в школе же на информатике еще изучают системы счисления. и эти люди потом занимаются автоматизацией.. ( | |||
| 52
    
        NorthWind 10.06.22✎ 07:22 | 
        (0) из 16 в 2 совсем просто. Каждый символ от 0 до F заменяешь последовательностью 0000,0001,0010,0011,0100 и так до 1111. Можно по предварительно составленной табличке.     | |||
| 53
    
        Garykom гуру 10.06.22✎ 08:59 | 
        (52) любые кратные системы-основания просто     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |