Tôi đang triển khai giao thức quy định rằng một chuỗi biểu thị mật khẩu phải được tuần tự hóa thành trường có độ dài cố định, 10 byte. Tôi đang sử dụng Data.Cereal để thực hiện nhiệm vụ này. Dưới đây là đi gần đây nhất của tôi lúc đó:Nối tiếp chuỗi ký tự với Data.Cereal hoặc Data.Binary
padText :: Int -> Text -> Text
padText fieldLen = T.justifyLeft fieldLen '\NUL'
putPassword :: Putter Password
putPassword = put . TE.encodeUtf8 . padText 10
đặt trên ByteStrings prepends thêm một đoạn 8-byte vào phía trước của những gì nó được mã hóa làm:
runPut $ putPassword "Friend"
kết quả trong:
"\NUL\NUL\NUL\NUL\NUL\NUL\NUL\nFriend\NUL\NUL\NUL\NUL"
Tôi không muốn đoạn thừa. Tại sao lại hành xử theo cách này?
Có ai biết cách tuần tự hóa chỉ 10 byte gốc không?