Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
1-20462
Bosh
2003-07-23 05:53
2003.08.07
TiniFiles


1-20592
som
2003-07-24 14:00
2003.08.07
Диалог открытия директорий


3-20407
rust
2003-07-16 12:57
2003.08.07
Treeview


1-20482
zloy_dima
2003-07-25 10:58
2003.08.07
Stream


1-20528
Far
2003-07-25 00:21
2003.08.07
Печать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский