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
5
A
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).
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