Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование 16->10 [D7, Win2k, WinXP]


Страницы:   1 2

zeppelin ©   (2004-08-04 19:59:00) 

Как преобразовать 16-е число в 10-е?


Kergma   (2004-08-05 15:51:00) [1]

153,009179356366


Kergma   (2004-08-05 15:49:00) [2]


const
j:int64 = $4063204B32816C7F;
var
i : int64;
k : Double absolute i;
begin
 i := j;
 memo1.Lines.Add( floattostr(k));
end;


начинающий   (2004-08-05 15:12:00) [3]

406-3FF=7
2Y7=128

4063204B32816C7F округлим до 4063204B32800000

3204 B328 = 0011001000000100 1011001100101000

128*(1/2Y0+1/2Y3+1/2Y4+1/2Y7+1/2Y17+1/2Y19+1/2Y20+1/2Y23+1/2Y24+1/2Y27+1/2Y29)=
153,0013668537139892578125

Кстати, у меня Дельфи показывает несколько другое значение 153,009:
40632049BA5E353F округлим до 40632049BA500000
3204 9BA5 = 0011001000000100 1001101110100101
128*(1/2Y0+1/2Y3+1/2Y4+1/2Y7+1/2Y14+1/2Y17+1/2Y20+1/2Y21+1/2Y23+1/2Y24+1/2Y25+1/2Y27+1/2Y30+1/2Y32)=
153,0089999735355377197265625
Видно, что даже отбросив 20 бит, результат всё равно довольно точный.


SelloutS   (2004-08-05 00:47:00) [4]

ну 0A = 10 =)


Fay   (2004-08-04 22:46:00) [5]

2 SelloutS   (04.08.04 22:36) [17]
'0a'


SelloutS   (2004-08-04 22:36:00) [6]

function HexStrToInt(s: String): Integer;
 function HDigital(C: Char): Byte;
 begin
   case c of
     '0'..'9': Result := ord(C) - ord('0');
     'A'..'F': Result := ord(C) - ord('A') + 10;
   else
     raise EConvertError.Create('Недопустимое представление шестнадцатеричного числа');
   end;
 end;
var
 k: Integer;
begin
 Result := 0;
 for k := 1 to Length(S) do
   Result := Result*16 + HDigital(S[k])
end;


Fay   (2004-08-04 21:57:00) [7]

>> Зато прозрачно - понятно "на пальцах" - что именно делается
М.б. Но время тратится на попытку понимания целесообразности такого решения. Мне потребовалось больше минуты. 8)


Тестировщица   (2004-08-04 21:56:00) [8]

Зато прозрачно - понятно "на пальцах" - что именно делается


Fay   (2004-08-04 21:55:00) [9]

2 Тестировщица ©   (04.08.04 21:30) [13]
Дя-а-а. 8)

Label1.Caption:=FloatToStr(PDouble(@j)^);


Тестировщица   (2004-08-04 21:30:00) [10]

Примерно так...
//var
//  j:int64=$4063204B32816C7F;
procedure TForm1.Button1Click(Sender: TObject);
var
   p:Pointer;
   pi:PInt64;
   pd:PDouble;
begin
   pi:=@j;
   p:=pi;
   pd:=p;
   Label1.Caption:=FloatToStr(pd^);
end;


Fay   (2004-08-04 21:04:00) [11]

тогда "="


zeppelin   (2004-08-04 21:01:00) [12]

4063204B32816C7F это 153.009


Fay   (2004-08-04 20:59:00) [13]

Ладно. А чем тогда "такой" вид отличается от вида, в котором float?


zeppelin   (2004-08-04 20:56:00) [14]

Да число представлено в таком виде.


Fay   (2004-08-04 20:50:00) [15]

А это (4063204B32816C7F) числов каком виде есть?


VMcL   (2004-08-04 20:50:00) [16]

>> zeppelin  (04.08.04 20:25) [4]
>> zeppelin  (04.08.04 20:29) [6]

Для этого нужно знать, в каком формате число записано.


zeppelin   (2004-08-04 20:29:00) [17]

Есть число представленное в шестнадцатиричной форме,
его необходимо преобразовать число типа float.


begin...end   (2004-08-04 20:27:00) [18]


> 4063204B32816C7F = 153.009

Э-э... Это как?


zeppelin   (2004-08-04 20:25:00) [19]

Пример
4063204B32816C7F = 153.009


Fay   (2004-08-04 20:21:00) [20]

2 zeppelin   (04.08.04 19:59)

Что именно нужно?! $10 -> $16?
Уточни вопрос.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо