var a: longword=$2f5990;
function inttohex(x: longword; y: integer): string;
const c: string ='0123456789ABCDEF';
var s: string;
begin
s:='';
for var i:=1 to y do
begin
s:=c[1+x mod 16]+s;
x:=x div 16;
end;
inttohex:=s;
end;
begin
writeln(inttohex(a,2));
writeln(inttohex(a shr 8,2));
writeln(inttohex(a shr 16,2));
end.
//90
//59
//2F
Другие языки программирования и технологии
Как в pascal.ABC разделить шестнадцетеричное число состоящее из 6 символов (например 2f5990) на 3 части "2f" "59" и "90"
Oleg Germanov
спасибо, помог, а можно как-то сделать так чтобы число не как longword прописывать в самом начале, а вводить с клавиатуры?
Дмитрий Лукин
так сразу ничего на ум не приходит. паскаль чудной язык.
Все варианты, которые пришли в голову (поправишь - это Delphi):
uses
SysUtils;
procedure HexToParts(const Hex: string; var a, b, c: string); overload;
begin
if Length(Hex) = 6 then
begin
a := Copy(Hex, 1, 2);
b := Copy(Hex, 3, 2);
c := Copy(Hex, 5, 2);
end;
end;
procedure HexToParts(const Hex: string; var a, b, c: Integer); overload;
begin
if Length(Hex) = 6 then
begin
a := StrToInt('$' + Copy(Hex, 1, 2));
b := StrToInt('$' + Copy(Hex, 3, 2));
c := StrToInt('$' + Copy(Hex, 5, 2));
end;
end;
procedure HexToParts(const Hex: Integer; var a, b, c: Integer); overload;
var
szHex: string;
begin
szHex := IntToHex(Hex, 6);
a := StrToInt('$' + Copy(szHex, 1, 2));
b := StrToInt('$' + Copy(szHex, 3, 2));
c := StrToInt('$' + Copy(szHex, 5, 2));
end;
procedure HexToParts(const Hex: Integer; var a, b, c: string); overload;
var
szHex: string;
begin
szHex := IntToHex(Hex, 6);
a := Copy(szHex, 1, 2);
b := Copy(szHex, 3, 2);
c := Copy(szHex, 5, 2);
end;
Когда выберешь нужную функцию, убери overload;
uses
SysUtils;
procedure HexToParts(const Hex: string; var a, b, c: string); overload;
begin
if Length(Hex) = 6 then
begin
a := Copy(Hex, 1, 2);
b := Copy(Hex, 3, 2);
c := Copy(Hex, 5, 2);
end;
end;
procedure HexToParts(const Hex: string; var a, b, c: Integer); overload;
begin
if Length(Hex) = 6 then
begin
a := StrToInt('$' + Copy(Hex, 1, 2));
b := StrToInt('$' + Copy(Hex, 3, 2));
c := StrToInt('$' + Copy(Hex, 5, 2));
end;
end;
procedure HexToParts(const Hex: Integer; var a, b, c: Integer); overload;
var
szHex: string;
begin
szHex := IntToHex(Hex, 6);
a := StrToInt('$' + Copy(szHex, 1, 2));
b := StrToInt('$' + Copy(szHex, 3, 2));
c := StrToInt('$' + Copy(szHex, 5, 2));
end;
procedure HexToParts(const Hex: Integer; var a, b, c: string); overload;
var
szHex: string;
begin
szHex := IntToHex(Hex, 6);
a := Copy(szHex, 1, 2);
b := Copy(szHex, 3, 2);
c := Copy(szHex, 5, 2);
end;
Когда выберешь нужную функцию, убери overload;
Oleg Germanov
не работает...
Сие зависит от того, в каком виде ты хранишь это число.
Удобнее всего это делать в виде целого.
Тогда делить можно быстро и легко при помощи бинарных операций:
a := x and $ff;
b:= x shl 8 and $ff;
c:= x shl 16;
Удобнее всего это делать в виде целого.
Тогда делить можно быстро и легко при помощи бинарных операций:
a := x and $ff;
b:= x shl 8 and $ff;
c:= x shl 16;
Oleg Germanov
не работает...
Oleg Germanov
пишет что входная строка имеет не верный формат
Oleg Germanov
получается что не спрашивал (а нужно было)...
Похожие вопросы
- как решить через abc pascal задачу "Дано натуральное число n. Получить все простые делители этого числа"
- Проблема с программой в Pascal ABC,Встречено ';',а ожидалось ':'. Если менять, то вылетает ещё ошибка с if
- Дано натуральное число m.Переставьте местами первую и вторую цифры этого числа Pascal ABC.NET
- Программа в pascal abc
- Напишите программу к задаче в Pascal abc. Необходимо ввести три целых числа и определить, какое из них
- Pascal abc и Pascal одно и тоже? Или разные языки программирования?
- Как в Pascal ABC на модуле Graph ABC провести вертикальную ось симметрии.
- Как в Pascal ABC с помощью модуля graph abc нарисовать это
- В чём отличия Pascal ABC, Free Pascal, Lazarus, Delphi?
- Pascal . Дан массив вещественных чисел. Найти сумму элементов, номера которых являются простыми числами