2 NSData对象如何输出相同的HEX但转换为char数组时会有所不同?

时间:2013-04-05 17:19:19

标签: ios objective-c cocoa-touch nsdata

所以基本上我有一些NSData对象和一个看起来像这样的方法:

+ (NSData *)outputData:(NSData *)data andThisData:(NSData *)secondData {
    char cData[data.length];
    [data getBytes:&cData];

    char cSecondData[secondData.length];
    [secondData getBytes:&cSecondData];

    NSLog(@"NSData: %@, %@", data, secondData);
    NSLog(@"HEX: %x, %x",cData,cSecondData);
}

我正在为两个单独的NSData对象获取此输出,这些对象在其表面上看起来相同:

 NSData: <dc4945fa a76fa1eb 6c3de73e acabf71c>, <c7a75cfc 11697878 14b95c2b 8680b60b ed553909 d199c12b 6e66df1d 20dce6e5 46ef9cf6 0aefa4ee bf98b0d1 6579a311>
    HEX: 5fbfe870, 5fbfe840

 NSData: <dc4945fa a76fa1eb 6c3de73e acabf71c>, <c7a75cfc 11697878 14b95c2b 8680b60b ed553909 d199c12b 6e66df1d 20dce6e5 46ef9cf6 0aefa4ee bf98b0d1 6579a311>
    HEX: 5fbfe820, 5fbfe7f0

正如您所看到的,NSData输出完全相同,但它们产生的char十六进制是不同的(尽管非常相似)。这是在放弃一些计算和进一步计算的结果,但我不明白为什么它们会有所不同。

那么在什么情况下会发生这种情况?我该如何解决它?

非常感谢。 (如果您需要更多信息,请告诉我。)

1 个答案:

答案 0 :(得分:3)

您不是在缓冲区中打印数据。您正在打印两个本地阵列的地址衰减的指针。如果您实际打印数据,它们将是相同的:

NSMutableString *hex = [NSMutableString string], *secondHex = [NSMutableString string];
for (int i = 0; i < sizeof(cData); i++) {
    [hex appendFormat:@"%02x", cData[i]];
    [secondHex appendFormat:@"%02x", cSecondData[i]];
}

NSLog(@"%@ %@", hex, secondHex);