Umgang mit signierten Binärdaten in Haskell ohne unsafeCoerce

8

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, < Word16 in ein Int16 . Gibt es einen besseren Weg, damit umzugehen?

    
user640078 01.03.2011, 21:35
quelle

3 Antworten

8

fromIntegral konvertiert Word16 in Int16. Sie müssen jedoch überprüfen, ob das Ergebnis, das Sie erwarten, beim Signieren vorliegt.

    
stephen tetley 01.03.2011, 22:27
quelle
3

Das Paket Data.Convertible sollte ausreichen wonach du fragst.

Um zB von Word16 nach Int16 zu konvertieren:

%Vor%     
Joel Burget 01.03.2011 22:10
quelle
1

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:

%Vor%     
Aaron Robson 21.02.2015 02:31
quelle

Tags und Links