gpt4 book ai didi

objective-c - [[NSMutableData alloc] initWithLength :] and CFDataCreateMutable()? 之间的区别

转载 作者:行者123 更新时间:2023-12-03 17:35:29 26 4
gpt4 key购买 nike

我正在查看一些创建可变数据对象并将 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));

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

最佳答案

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

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

关于objective-c - [[NSMutableData alloc] initWithLength :] and CFDataCreateMutable()? 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11270285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com