パスワードを表す文字列を固定長の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"
余分なチャンクは必要ありません。なぜこのように振る舞うのですか?
元の10バイトだけをシリアル化する方法を知っている人はいますか?