Другие языки программирования и технологии

Как в pascal.ABC разделить шестнадцетеричное число состоящее из 6 символов (например 2f5990) на 3 части "2f" "59" и "90"

Oleg Germanov
Oleg Germanov
116
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
Дмитрий Лукин
Дмитрий Лукин
20 239
Лучший ответ
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;
Oleg Germanov не работает...
Сие зависит от того, в каком виде ты хранишь это число.
Удобнее всего это делать в виде целого.
Тогда делить можно быстро и легко при помощи бинарных операций:

a := x and $ff;
b:= x shl 8 and $ff;
c:= x shl 16;
Петр Ковбасюк
Петр Ковбасюк
87 773
Oleg Germanov не работает...
Oleg Germanov пишет что входная строка имеет не верный формат
Oleg Germanov получается что не спрашивал (а нужно было)...