0

可変データオブジェクトを作成し、SHA1ハッシュをその中に入れるコードを見ています。ターゲットの可変データオブジェクトをで初期化すると

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

すべてが正常に動作します。その1行をに変更すると

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 に答える