覆盖Word中的最低有效位

时间:2014-12-19 23:02:37

标签: haskell binary

我正在尝试编写一个小工具,通过覆盖输入中每个字节的LSB来隐藏PGM图像文件中的文本。我需要帮助编写诸如

之类的函数
writeBit :: Bool -> Word8 -> Word8
writeBit b w = ...

其中输出等于w且其LSB设置为b。任何人都可以帮我开始这个吗?

谢谢

3 个答案:

答案 0 :(得分:4)

查看setBitclearBit

setBit :: a -> Int -> a
clearBit :: a -> Int -> a 

答案 1 :(得分:1)

除了正确的答案,您应该使用模块Data.Bits,如果您只想设置/取消设置输入字节的最低有效位,您也可以自己编写该函数。使用您的功能签名:

setLSB :: Bool -> Word8 -> Word8
setLSB b w
  | b && even w = w + 1
  | not b && odd w = w - 1
  | otherwise = w

答案 2 :(得分:1)

我会回答bmk,说Syd Kerckhove的回答是正确的,但是一个很短的选择是

setLSB :: Integral n => Bool -> n -> n
setLSB b w = w - 1 + fromEnum b + fromEnum (even w)
相关问题