久しぶりに

単なるxor式のチェックサム。ビット操作のサンプル程度に。

module FCS where
import Bits
import Word

toHex :: Int -> Char
toHex a = "0123456789ABCDEF" !! a

strToFCS :: [Char] -> [Char]
strToFCS a = toFCS (xors a)
    where
        toFCS :: Int -> [Char]
        toFCS a = [toHex (a `div` 16), toHex (a `mod` 16)]
        xors :: [Char] -> Int
        xors [] = 0
        xors (c:cs) = word8ToInt( (intToWord8 (ord c)) `xor` (intToWord8 (xors cs)))

Fileのコンストラクタはopenメソッド

http://d.hatena.ne.jp/shinichiro_h/20040611#p1

の、微妙に続いてないような話。

なんでopen中でCreateFileに渡されてるフラグがOPEN_ALWAYSなんじゃい。
どう考えてもOPEN_EXISTINGが正しいだろーに。

結果どうなるかといいますと、存在しないファイルをINモードで開いても、例外出さずに新しくファイル作りやがります