Tagi na forum.

Windows 14206 SQL Server 2132
sieci 6796 Windows XP 1921
SQL 6578 Outlook 1838
SBS 3868 Uprawnienia 1777
Windows 2003 2781 IIS 1636
Windows Server 2588 Office 1516
DNS 2315 Skrypt 1499

pokaż wszystkie tagi na forum

Konwersja 4 byte'ów do double?

sebz 2009-09-09 11:13:59
0
avatar
 
 
Witam.

Przerabiam stare procedury z Delphi na C# i natknąłem się na następujący problem.
Podczas przetwarzania ramki zwrotnej z urządzenia muszę przetworzyć 4 bajty, których zawartośc jest typu single (Delphi).
O ile w samym Delphi konwersja rzutowania działa poprawnie to odczytanie tych samych 4 bajtów w C# kończy się stratą dokładności (dla dużych liczb).
Np. z tablicy 4 bajtów Delphi zwróci liczbę "23 324 768 256.0" zaś ta sama tablica w C# da efekt w postaci "23 324 760 000.0".

Przetwarzanie w Dephi:
single( addr(STR[1])^ );
Przetwarzanie w C#:
memoryStream = new System.IO.MemoryStream(bytesFloat);
binaryReader = new System.IO.BinaryReader(memoryStream);
return binaryReader.ReadSingle();

Chciałbym rozwiązać ten problem tworząc z tej tablicy bajtów liczbę double... ona bez problemu przyjmuje tą dokładność... niestety nie wiem jak przetworzyć te 4 bajty aby uzyskać dokładność double.
Sebastian
tagi: C#   delphi


sebz  2009-09-09 15:14:31 #1
0
avatar
 
 
Konkretniejszy przykład:

tablica bajtów [60,165,173,80] w Delphi daje 23 306 297 344.0, zaś w C# 23 306 300 000.0

Z tego co wiem w obu językach reprezentacja liczb zmiennoprzecinkowych jest identyczna 1bit (znak), 8 bitów (exponent) i 23 bity (mantysa)....

Skąd ta różnica....?
Sebastian

Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony