我正在实现一个协议,该协议规定表示密码的字符串应序列化为固定长度的 10 字节字段。我正在使用 Data.Cereal 来执行此任务。这是我最近的尝试:
padText :: Int -> Text -> Text
padText fieldLen = T.justifyLeft fieldLen '\NUL'
putPassword :: Putter Password
putPassword = put . TE.encodeUtf8 . padText 10
put on ByteStrings 将一个额外的 8 字节块添加到它正在编码的内容的前面:
runPut $ putPassword "Friend"
导致 :
"\NUL\NUL\NUL\NUL\NUL\NUL\NUL\nFriend\NUL\NUL\NUL\NUL"
我不想要额外的块。为什么put会有这种行为?
有谁知道如何只序列化 10 个原始字节?