Родились сегодня:
wadim21


Лидеры рейтинга

ID: 401284

Михаил Александров

Советник

378

Россия, Санкт-Петербург


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

339

Россия, пос. Теплоозёрск, ЕАО


ID: 401888

puporev

Профессор

215

Россия, Пермский край


ID: 405338

vovaromanov.jr

1-й класс

117


ID: 400669

epimkin

Профессионал

111


ID: 242862

Hunter7007

Мастер-Эксперт

29

Россия, Омск


ID: 137394

Megaloman

Мастер-Эксперт

25

Беларусь, Гомель


8.10.2

13.10.2021

JS: 2.10.2
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-10-23 05:16:01-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 108988

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Мироненко Николай Николаевич
Дата: 12.11.2007, 00:45 Консультация закрыта
Поступило ответов: 2

Здравствуйте! В принцыпе в переходе от HEX к BIN все понятно! Вот не пойму для чего в селекторе вы указывали (вместе с ord) цифры 48, 55 и 87! Напишыте пожалуйста!

case ord(c16[i]) of
48..57: c2:=c2+masBin[ord(c16[i])-48]; //для 0..9
65..70: c2:=c2+masBin[ord(c16[i])-55]; //для A..F
97..102: c2:=c2+masBin[ord(c16[i])-87]; //для a..f

Ответ # 193312 от Gh0stik
Здравствуйте, Мироненко Николай Николаевич!

Поскольку число в 16-ичной система счисления моет состоять из символов {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} либо {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}, а обращаться к элементу массива нужно только по ЦЕЛОЧИСЛЕННОМУ индексу, то приходится изначально символ переводить в его код с помощью функции ORD.

Код символа 'A' равен 55, символа 'a' равен 97, а символа '0' - 48.
Получаем что при значениях c16[i] равных от '0' до '9' будем обращаться к таким элементам массива:
masBin[ord('0')-48] = masBin[0]
masBin[ord('1')-48] = masBin[1]
masBin[ord('2')-48] = masBin[2]
masBin[ord('3')-48] = masBin[3]
masBin[ord('4')-48] = masBin[4]
masBin[ord('5')-48] = masBin[5]
masBin[ord('6')-48] = masBin[6]
masBin[ord('7')-48] = masBin[7]
masBin[ord('8')-48] = masBin[8]
masBin[ord('9')-48] = masBin[9]

Аналогично рассмотрим диапазоны и для букв.
от 'A' до 'F'
masBin[ord('A')-48] = masBin[10]
masBin[ord('B')-48] = masBin[11]
masBin[ord('C')-48] = masBin[12]
masBin[ord('D')-48] = masBin[13]
masBin[ord('E')-48] = masBin[14]
masBin[ord('F')-48] = masBin[15]

от 'a' до 'f'
masBin[ord('a')-48] = masBin[10]
masBin[ord('b')-48] = masBin[11]
masBin[ord('c')-48] = masBin[12]
masBin[ord('d')-48] = masBin[13]
masBin[ord('e')-48] = masBin[14]
masBin[ord('f')-48] = masBin[15]

Вот такая арифметика, и немного смекалки для компактного решения поставленной задачи ;).

Возможно более понятно для этой же задачи будет запись выше описанного кода в таком виде:
case c16[i] of
'0'..'9': c2:=c2 + masBin[ord(c16[i]) - Ord('0')];
'A'..'F': c2:=c2 + masBin[ord(c16[i]) - Ord('A')+10];
'a'..'f': c2:=c2 + masBin[ord(c16[i]) - Ord('a')+10];


Где +10 - "поправка на ветер", поскольку в массиве соответствующие значения для букв начинаются с элемента с индексом 10.

Good Luck!!!

Gh0stik

Посетитель
12.11.2007, 01:18
Ответ # 193314 от Стома С.С.
!!!
Здравствуйте, Мироненко Николай Николаевич!

В DOSе и в Windows существует кодировка которая называется ANSI.
Разновидность набора ANSI, содержащая символы русского алфавита, называется Windows-1251.
цифры 0..9 хранятся в компьютере как числа 48..57
буквы A..F 65..70 и нижний регистр соответственно догадались
ord - это операция с порядковыми типами которая возвращает его порядковый номер

В DOS'е кодировка называется "ОЕМ" или "ср866". По сравнению с кодировкой ANSI (windows-1251), расположение русских букв там совершенно другое.
-----
• Отредактировал: sir henry (Академик)
• Дата редактирования: 12.11.2007, 05:10

Стома С.С.

Посетитель
12.11.2007, 01:26
Мини-форум консультации # 108988
Нет сообщений в мини-форуме
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

puporev

Профессор

Рейтинг: 215

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 165

Gluck

9-й класс

Рейтинг: 79

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0