0

我正在查看一些创建可变数据对象并将 SHA1 哈希放入其中的代码。如果我初始化目标可变数据对象

CFMutableDataRef hashDataRef = (CFMutableDataRef)[[NSMutableData alloc] initWithLength:SHA_DIGEST_LENGTH];

一切正常。如果我将那一行更改为

CFMutableDataRef hashDataRef = CFDataCreateMutable(kCFAllocatorDefault, SHA_DIGEST_LENGTH);

它会中断(在 SHA1 命令之后,可变数据对象似乎仍然为空)。在这两种情况下,创建之后的行hashDataRef

SHA1(CFDataGetBytePtr(inputDataRef), CFDataGetLength(inputDataRef), CFDataGetMutableBytePtr(hashDataRef));

我没想到两者之间会有任何区别,但显然我错过了一些东西。在不使用 NSMutableData 和免费桥接的情况下,是否有适当的 Core Foundation 方法来获取我想要的可变数据对象?

4

1 回答 1

3

NSMutableData initWithLength:创建一个数据对象,其原始数据用零填充,但CFDataCreateMutable创建一个空的CFMutableDataRef. 即使它是用容量创建的,它的长度仍然为零。因此,当您使用 时CFDataGetMutableBytePtr,它会返回一个 NULL 指针。

要修复它,您可以使用CFDataSetLength将 CFMutableDataRef 填充到其容量,它用零填充数据。

于 2012-06-30T00:58:12.920 回答