2015-03-30 34 views
5

Czytam Word s z tablic bajtowych i trzeba zrobić części mojego kodu endian-świadomy. Czy GHC ujawnia cokolwiek (np. MachDeps.h), które mogę użyć, aby kod był uwarunkowany endiannessem procesora? Jeśli nie, to mogę wydedukować wiarygodność endianową z poziomu HOST_ARCH (z ghcplatform.h dostępnego w pliku .cabal z warunkiem warunkowym arch())? Lub inne pomysły?Kompilowanie warunkowe w oparciu o endianness

Odpowiedz

7

Szukasz czegoś takiego: https://hackage.haskell.org/package/cpu-0.1.0/docs/System-Endian.html

Jeśli nie chcą/nie mogą korzystać z tych pakietów, patrząc na kod źródłowy powyższego, można zobaczyć, jak sprawdzić bajt na każdej platformie (prawie) dowolny język programowania niższego poziomu, taki jak C lub podobny. Wypełnij część swojego stosu (dla maszyny z 4 bitami: na przykład 1000), a następnie odczytaj LSB lub MSB wspomnianego stosu. Endianness określi, w jaki sposób jest przechowywany (będziesz czytać z powrotem 1000 lub 0001).

+0

Dzięki! W pewnym sensie wykluczyłem to ze względu na wydajność, ale powinienem przyjrzeć się dokładniej. Myślę, że mógłbym przynajmniej zrobić ten trik w jakimś szablonie, by uzyskać stałą czasu kompilacji. – jberryman