|
Конвертация из 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) любые кратные системы-основания просто
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |