Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Weny Sky
Založen: 28. 07. 2007 Příspěvky: 241
|
Zaslal: 24. srpen 2008, 20:31:53 Předmět: Korektni ulozeni FPU datovych typu do souboru |
|
|
Zdravim,
jak spravne ulozit datove typu FPU(v C reprezentovane jako float a double), aby bylo mozne je nacist na vsech platformach, tedy napriklad x86, PowerPC, ARM, Motorola, ... U ALU typu je to jednoduche prehozeni endianu, ale pro FPU jsem nenasel zadne reseni.
Na wiki je napsane:
citace: |
Floating-point and endianness
On some machines, while integers were represented in little-endian form, floating-point numbers were represented in big-endian form. [3] Because there are many floating formats, and a lack of a standard "network" representation, no standard for transferring floating point values has been made. This means that floating point data written on one machine may not be readable on another, and this is the case even if both use IEEE 754 floating point arithmetic since the endian-ness of the memory representation is not part of the IEEE specification. |
Resil nekdo nejak tento problem?
Dik. |
|
Návrat nahoru |
|
|
ladik-BigBoss
Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 24. srpen 2008, 21:20:00 Předmět: |
|
|
v pripade ze potrebujes podporu takoveho mnozstvi platforem bych asi pouzil ascii reprezentaci cisel a pak je zpakoval treba pres zlib. neni to zrovna nejrychlejsi reseni, ale je obecne |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 24. srpen 2008, 21:35:08 Předmět: |
|
|
Bity musíš přehodit bez ohledu na datový typ. Zrovna jsem si to ověřil tak, že jsem si zkusil přenést a načíst soubor ze školního IRIX64 u sebe. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 25. srpen 2008, 07:40:21 Předmět: |
|
|
Dělal jsem to jednou a použil jsem uložení jako ASCII, v C# mi tím pak vznikl krásný problém, na který sem přišel až za 2 měsíce a opravoval jsem ho asi den. Jde o to, že v každý jazykový kultuře se zapisuje jinak. Např. en-US používá čárky na oddělení tisíců: 1,234.01 , kdežto cs-CZ klasicky 1234.01. Kompletní seznam zde: http://msdn.microsoft.com/en-us/library/system.single.parse(VS.71).aspx . Nevím jak moc se tento problém týka jazyka ve kterém budeš psát ty. |
|
Návrat nahoru |
|
|
Deluxe
Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 25. srpen 2008, 07:57:48 Předmět: |
|
|
Mozna by mohlo pomoct tohle:
kód: |
// If a swapped float passes through the fpu, the bytes may get changed.
// Prevent this by swapping floats as DWORDs.
#define SafeSwapFloat( pOut, pIn ) (*((uint*)pOut) = DWordSwap( *((uint*)pIn) )) |
je to z kodu HL2 takze by to mnelo fungovat na PC a XBOXu |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 25. srpen 2008, 08:00:30 Předmět: |
|
|
Matasx napsal: |
Dělal jsem to jednou a použil jsem uložení jako ASCII, v C# mi tím pak vznikl krásný problém, na který sem přišel až za 2 měsíce a opravoval jsem ho asi den. Jde o to, že v každý jazykový kultuře se zapisuje jinak. Např. en-US používá čárky na oddělení tisíců: 1,234.01 , kdežto cs-CZ klasicky 1234.01. Kompletní seznam zde: http://msdn.microsoft.com/en-us/library/system.single.parse(VS.71).aspx . Nevím jak moc se tento problém týka jazyka ve kterém budeš psát ty. |
to mas z toho ze nectes manual - pro zapis do souboru/streamu a prenos cisel, datumu, ... se pouziva tzv. univerzalni jazykova kultura - CultureInfo.Invariant - dava se jako IFormatProvider parametr metod jako ToString() nebo String.Format() - pak neni zadny problem pri prenosu |
|
Návrat nahoru |
|
|
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 25. srpen 2008, 08:09:18 Předmět: |
|
|
No jo, co na to říct? Teď už to vim Taky člověk nemůže vědět všechno a chybička se hold vloudí. |
|
Návrat nahoru |
|
|
majkl
Založen: 28. 08. 2007 Příspěvky: 4
|
Zaslal: 30. srpen 2008, 08:22:43 Předmět: |
|
|
Eosie napsal: |
Bity musíš přehodit bez ohledu na datový typ. Zrovna jsem si to ověřil tak, že jsem si zkusil přenést a načíst soubor ze školního IRIX64 u sebe. |
mno z vyse uvedene citace z wiki vyplyva, ze ne pokazde to bude treba prehodit - ruzne platformy to muzou pouzivat jinak.
Asi bych to fakt udelal tak jak rika ladik. V textovem formatu je to nejlepsi.
Co se tyce cecka - tak problem s mezinatodnima formatama obejdes pomoci fce locale() a imbue() .. jak to pouzit je kdekoli na netu.
Akorat pozn. davej bacha, kdybys chtel pouzivat unicode - funguje to nak dost divne. (resp. utf-16/32 ma problem - proste typ wchar neni poradne vyreseny(teda jeho spoluprace se streamama)). |
|
Návrat nahoru |
|
|
|