解決しました
関数が正しく機能していません。hex2dec "100"または "10000"を実行すると、正しい256ではなく16になります。hex2dec "101"を実行すると、正しい257ではなく17になります。
hex2dec :: String -> Integer
hex2dec str = go (reverse str)
where go [] = 0
go (x:xs) = hexChar x + 16 * hex2dec xs
hexChar :: Char -> Integer
hexChar c
| c == '0' = 0
| c == '1' = 1
| c == '2' = 2
| c == '3' = 3
| c == '4' = 4
| c == '5' = 5
| c == '6' = 6
| c == '7' = 7
| c == '8' = 8
| c == '9' = 9
| c == 'a' = 10
| c == 'b' = 11
| c == 'c' = 12
| c == 'd' = 13
| c == 'e' = 14
| c == 'f' = 15
| otherwise = 0
「hex2dec」を「go」に変更する必要がありました。
hex2dec :: String -> Integer
hex2dec str = go (reverse str)
where go [] = 0
go (x:xs) = hexChar x + 16 * go xs
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加