Форум: "Основная";
Текущий архив: 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.008 c