数组上的 MD5,array[0..63, uint8] 到 cstring 的转换

MD5 on an array, array[0..63, uint8] to cstring conversion

我正在尝试对数组 [0..63, uint8] 执行 md5Update,但我得到了

Error: type mismatch: got (MD5Context, array[0..63, uint8], int)
but expected one of: 
md5.md5Update(c: var MD5Context, input: cstring, len: int)

它似乎需要一个 ctring 输入而不是一个缓冲区。那么如何对二进制数据执行 md5Update() 呢? (我不想要最后一个空字符...)

您可以使用 cast[cstring](addr myBuf) 将缓冲区转换为 cstring。请注意,您还必须传递 var MD5Context,这意味着它必须是可变的(在 var 内定义或作为 var 参数传递)。代码示例:

const arr = [0'u8, 0, 0]
var ctx: MD5Context
md5Init(ctx)
md5Update(ctx, cast[cstring](unsafeAddr arr), sizeof(arr))
var digest: MD5Digest
md5Final(ctx, digest)