Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Шестнадцатиричная система исчисления


ssmaxx ©   (2004-11-03 12:47:00) 

День добрый. Не подскажете, как работать с шестнадцатиричными числами (типа 1А, 2F, и т.д.), а именно: как их просмотреть, если они сидят в переменной типа Integer. И есть ли какие-нибудь специальные процедуры их обработки.


ssmaxx   (2004-11-03 13:36:00) [1]


> S2 := IntToHex(StrToIntDef(S1, 0) + 1, 2);


БОЛЬШОЕ СПАСИБО!!!!


ssmaxx   (2004-11-03 13:31:00) [2]


> Reindeer Moss Eater ©   (03.11.04 12:50) [1]
> IntToHex.


Спасибо!


TUser   (2004-11-03 13:28:00) [3]

А если хочешь ручками век сделать, тогда так

function EnLarge(S:string):string;
const L:array [0..15] of char =
     ('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
var i:integer;
   c:char;
   f:boolean;
begin
  if S = '$' then begin
     result:='$1';
     Exit; // :((((
     end;
  S:=LowerCase(S);
  c:=S[length(S)];
  f:=true; i:=0;
  while f and (i < length(L)) do
     if L[i] <> c then
        inc (i)
        else f:=false;
  if f then
     raise Exception.Create('jopa');
  if i < length(L)-1 then
     S[length(S)]:=L[i+1]
     else
     S:=EnLarge(copy(S,1,length(S)-1))+'0';
  result:=S;
end;


begin...end   (2004-11-03 13:22:00) [4]


> [7] ssmaxx   (03.11.04 13:10)


var
 S1, S2: String;
begin
 S1 := '$1F';
 S2 := IntToHex(StrToIntDef(S1, 0) + 1, 2);
 ShowMessage(S2)
end.


TUser   (2004-11-03 13:17:00) [5]

val вполне нормально понимает hex-числа


Reindeer Moss Eater   (2004-11-03 13:11:00) [6]

Зашибись.
А это кто сказал:
если они сидят в переменной типа Integer.


ssmaxx   (2004-11-03 13:10:00) [7]

Я наверно неправильно выразился. Что мне надо: у меня в текстовом файле есть строка:
1F
Следующей строкой я хочу поставить число, на единицу большее. Как это сделать, я не знаю (т.к. необходимо строковое представление).


TUser   (2004-11-03 13:08:00) [8]

Столько пальцев необходимо для управления клавиатурой будущего.


begin...end   (2004-11-03 13:06:00) [9]


> [3] Юрий Зотов ©   (03.11.04 13:00)


> А в BIN - 100000100.

Э-э... Разве это 20?

P.S. Не хотел бы я иметь столько пальцев... 8-)


TUser   (2004-11-03 13:05:00) [10]


> Все это РАЗНЫЕ строки - но разве количество пальцев у Вас
> меняется, в какой бы системе его не записали?

А в попугаях-то я гооораздо длиннее (С)


Юрий Зотов   (2004-11-03 13:00:00) [11]

> ssmaxx   (03.11.04 12:47)

Понимаете, шестнадцатиричных ЧИСЕЛ не существует. И десятичных тоже. И никаких других ЧИСЕЛ тоже не существует.

А существуют шестнадцатиричные, десятичные и прочие СТРОКОВЫЕ представления чисел. То есть, СТРОКИ, а не ЧИСЛА.

Вот у Вас 20 пальцев. Это в DEC. А в HEX их будет 14. А в BIN -
100000100. Все это РАЗНЫЕ строки - но разве количество пальцев у Вас меняется, в какой бы системе его не записали?


Digitman   (2004-11-03 12:51:00) [12]


> если они сидят в переменной типа Integer


в переменной типа Integer никакие "шестнадцатиричные числа" не "сидят"... равно как и в переменной любого другого типа.

если же тебе нужно получить содержимое переменной типа Integer в шестнадцатеричноми представлении, то для этого есть ф-ция IntToHex()


Reindeer Moss Eater   (2004-11-03 12:50:00) [13]

IntToHex.

Только они там не сидят.
Кто ж их посадит?
Это же цифры!


Наверх

Титульная страница Поиск, карта сайта Написать письмо