我正在尝试编写一个小工具,通过覆盖输入中每个字节的LSB来隐藏PGM图像文件中的文本。我需要帮助编写诸如
之类的函数writeBit :: Bool -> Word8 -> Word8
writeBit b w = ...
其中输出等于w
且其LSB设置为b
。任何人都可以帮我开始这个吗?
谢谢
答案 0 :(得分:4)
答案 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)