Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.07;
Скачать: CL | DM;

Вниз

Системы счисления   Найти похожие ветки 

 
OHP   (2003-07-24 00:46) [0]

Добрый вечер!
Такой вопрос: как перевести семизначное шеснадцатеричное число в четырехзначное 255-ричный набор символов (т.е. можно использовать все 255 символов) при помощи Делфи?


 
Ihor Osov'yak ©   (2003-07-24 00:56) [1]


Случаем не это?

procedure TForm1.FormCreate(Sender: TObject);
var
s: string;
i: integer;
begin
s := "ABCDEF"; // source
i := StrToInt("$"+s); // i - резулт
Caption := IntToStr(i); // просто контроль
end;


 
Marser ©   (2003-07-24 01:09) [2]

Перевести семизначное шестнадцатиричное в четырехзначное десятичное невозможно(если в исходном нет нолей слева).
Просто $FFFFFFF=268435455 что заметно больше 9999


 
OHP   (2003-07-24 01:14) [3]

Не не! Я имею в виду что допустим у нас есть число D45FF1A и нужно перевести в 255-ричное (4-значное) число, т.е. используя при этом все 255 символов от #0 - я. В 16-ричной кодировке используются ABCDEF, а тут все 255 символов


 
Ihor Osov'yak ©   (2003-07-24 01:23) [4]

2 Marser © (24.07.03 01:09)

Имеет место изначальная некорректная постановка вопроса. Посему я переспрашивал "Случаем не это?"

Зы. У тебя есть явные противоречия с тем, что можно интерпретировать из вопроса.

Например, "четырехзначное 255-ричный набор символов (т.е. можно использовать все 255 символов)" свидетельствует о том, что человек имел ввиду или 32-битное знаковое или безнаковое целое, или строку из четырех символов.. Ты же спич ведешь о "четырехзначном десятичном"

Что имелось ввиду под "семизначным шеснадцатеричным" также однозначно утверждать нельзя, но я думаю, что мой вариант интерпретации ближе к тому, что имелось ввиду, особенно учитывая фразу "т.е. можно использовать все 255 символов", которая относится к выходным данным, а не входным..


хух, на разговорчики потянуло...


 
Ihor Osov'yak ©   (2003-07-24 01:27) [5]

2 OHP (24.07.03 01:14)

Наверно тогда вот это:

procedure TForm1.FormCreate(Sender: TObject);
var
sInp: string;
i: integer;
sOut: string;
begin
sInp := "D45FF1A";

i := StrToInt("$"+sInp);
SetLength(sOut,4);
Move(i,sOut[1],4);

Caption := sOut;
end;




 
JohnJ ©   (2003-07-24 01:30) [6]

Переведи 16-тиричное в 10-тичное, а затем это 10-ое в 255-ричное!
Например:
ABCDEF(16)=F*16^0+E*16^1+E*16^2+D*16^3+C*16^4+B*16^5+A*16^7=
=x(10)
Затем A[i]:=x mod 255
x:=x div 255
i:=i+1;
И зацикли.
Потом запишешь A[i] задом наперёд - это и будет нужное число.
Только вот... Если тебе все символы нужны, то у тебя система счисления будет 256-ричной! Так как с нулём будет 256 символов! Тогда надо везде вместо 255 поставить 256!



 
OHP   (2003-07-24 01:34) [7]

Насчет вопроса извиняюсь... целый день за компом, уже и голова глючить начинает, а советы счас попробую


 
dataMaster ©   (2003-07-24 01:35) [8]

Или может быть вот так:

function HexTo255(H:String):string;
var
k:longint;
s:string;
begin
k:=StrToInt("$"+H);
s:="";
while k>=255 do
begin
s:=chr(k mod 255)+s;
k:=k div 255;
end;
Result:=chr(k)+s;
end;


 
dataMaster ©   (2003-07-24 01:39) [9]

В примере надо заменить 255 на 256.


 
OHP   (2003-07-24 02:07) [10]

Спасибо! Все работает... Но... Ihor Osov"yak, каков принцип работы вашей функции?


 
Ihor Osov'yak ©   (2003-07-24 02:17) [11]

2 dataMaster © (24.07.03 01:35)

если нужно поменять слева-на-право, то вместо

function HexTo255(H:String):string;
var
k:longint;
s:string;
begin
k:=StrToInt("$"+H);
s:="";
while k>=256 do
begin
s:=chr(k mod 255)+s;
k:=k div 255;
end;
Result:=chr(k)+s;
end;


лучше так:

function HexTo255(H:String):string;
var
k:longint;
arr:array[0..3] of byte absolute k;
i: integer;
begin
k:=StrToInt("$"+H);

SetLength(Result,4);
for i := 1 to 4 do Result[i] := char(arr[4-i]);
end;


Если не нужно лево-право - то см. (24.07.03 01:27), и тогда в твоем стиле


function HexTo255(H:String):string;
var
k:longint;
begin
k:=StrToInt("$"+H);

SetLength(Result,4);
Move(k,result[1],4);
end;





 
Ihor Osov'yak ©   (2003-07-24 02:20) [12]

2 OHP (24.07.03 02:07)

Используется документированная информация о внутреннем представлении типов integer в мире win32 и string в мире delphi..


 
Ihor Osov'yak ©   (2003-07-24 02:22) [13]


Что то выравнивение глючит.. Далее просто тест


function HexTo255(H:String):string;
var
k: longint;
begin
k := StrToInt("$"+H);

SetLength(Result, 4);
Move(k, result[1], 4);
end;


 
dataMaster ©   (2003-07-24 02:25) [14]

2Ihor Osov"yak © (24.07.03 02:17)
Согласен. Эта процедура ( dataMaster © (24.07.03 01:35) ) у меня переводила целое в восьмиричное ;-), поэтому как была, так и дал, только цифирки поменял. И то лажанулся. Ночь свое дело делает :-)


 
Anatoly Podgoretsky ©   (2003-07-24 09:30) [15]

OHP (24.07.03 02:07)
Это не важно тебе не подойдет, там не 255-ричное, а 256-ричное.
Бери те примеры которые основаны на модуле 255, их тебе привели два


 
OHP   (2003-07-24 13:13) [16]

Впрочем, все ясно, еще раз спасибо


 
Ihor Osov'yak ©   (2003-07-24 13:30) [17]

2 Anatoly Podgoretsky © (24.07.03 09:30)

Анатолий, как всегда, прав. Только все же имею маленькое подозрение, что человек, говоря "255-ричный набор символов" имелось ввиду набор с кодами от 0 до 255, то есть 256.
.. но это я уже пишу почти флейма ради. Ведь "OHP (24.07.03 13:13)
Впрочем, все ясно, еще раз спасибо" - что собственно и ставилось за цель..


 
Anatoly Podgoretsky ©   (2003-07-24 13:44) [18]

Видишь как у нас одинаково с подозрениям, и у меня кроме того есть второе подозрение, что мы правы :-)


 
icWasya ©   (2003-07-24 14:48) [19]

и ещё
http://algolist.manual.ru/maths/teornum/count_sys.php



Страницы: 1 вся ветка

Текущий архив: 2003.08.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.02 c
1-20587
VISA
2003-07-24 13:14
2003.08.07
Эмуляция клика на заголовке окна.


3-20414
Сана
2003-07-16 17:14
2003.08.07
Немецкий в Access!


14-20685
Andryk
2003-07-23 10:00
2003.08.07
Просто прикол :о))


3-20404
Alex_x
2003-07-16 10:12
2003.08.07
---|Ветка была без названия|---


1-20613
Buffoon
2003-07-24 19:35
2003.08.07
выделение строки в StringGrid