使用Objective-C计算CRC32校验和

时间:2015-09-28 16:25:12

标签: java objective-c

我正在尝试在Objective-C中转换我的Java代码。

Java代码:

pDataResult = "105501005523069400E4100300000000000000000000000000000000"

checksum.update(pDataResult, 0, 12);
long checksumValue = checksum.getValue();

在Objective-C中:

#include <zlib.h>;

NSString *testString = @"105501005523069400E4100300000000000000000000000000000000";
NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];
Byte *testByte = (Byte *)[testData bytes];

uLong crc2 = crc32(0L, Z_NULL, 0);
long long result2 = crc32(crc2, &testByte, 12);

NSLog(@"file crc32 checksum %llu", result2)

在Java中,checksumValue等于4253726258,但在Objective-C中它是752296094。

更新

我试过这个版本

    Byte * j=Byte * j= {0x10, 0x55, 0x01 ,0x00, 0x55 ,0x23, 0x06, 0x94,0x00 ,0xe4, 0x10, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,‌​0x00};
    NSData *data2 = [[NSData alloc] initWithBytes:&j length:sizeof(j)] ;

    uLong crc = crc32(0L, Z_NULL, 0);
    long long result = crc32(crc, &j, 12);
    NSLog(@"file crc32 checksum %llu", result);

我现在有了

429518402

1 个答案:

答案 0 :(得分:0)

我花了好几天的时间。我刚刚使用了CryptoSwift,结果是正确的。