Ich lese in einer Struktur aus einer Binärdatei, die 16-Bit-Integer mit Vorzeichen enthält, mit der Get -Monade von Data.Binary . Mein aktueller Code sieht so aus:
%Vor% Ich bin nicht glücklich darüber, unsafeCoerce zu verwenden, aber es scheint keine Möglichkeit zu geben, ein Int16 direkt einzulesen, und auch keine Möglichkeit, <
fromIntegral konvertiert Word16 in Int16. Sie müssen jedoch überprüfen, ob das Ergebnis, das Sie erwarten, beim Signieren vorliegt.
Das Paket Data.Convertible sollte ausreichen wonach du fragst.
Um zB von Word16
nach Int16
zu konvertieren:
Aufbauend auf Stephens Antwort hier ist eine Implementierung der get- und put-Funktionen für Int8, Int16 und Int32 analog zu den bestehenden für Word8, Word16 und Word32. Ich habe noch nicht Int64
oder Host-Endian Unterstützung benötigt, aber diese können hinzugefügt werden: