![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование 16->10 [D7, Win2k, WinXP]
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?
Уточни вопрос.