小编Sam*_*ues的帖子

如何在Objective-C中对NSData进行按位异或?

我有两个NSData对象data1和data2,我想进行按位XOR并将结果存储在第三个NSData对象xorData中。

我尝试的第一件事是:

*data1.bytes^*data2.bytes;
Run Code Online (Sandbox Code Playgroud)

但是它给出了一个错误:

无效的二进制二进制操作数(“ const void”和“ const void”)

因此,我试图编写一个函数,该函数将数据字节提取到整数数组中,对整数执行异或运算,然后将结果保存回NSData对象。该函数如下所示:

+(NSData *) DataXOR1:(NSData *) data1
DataXOR2:(NSData *)data2{
    const int *data1Bytes = [data1 bytes];
    const int *data2Bytes = [data2 bytes];
    NSMutableArray *xorBytes = [[NSMutableArray alloc] init ];
    for (int i = 0; i < data1.length;i++){
         [xorBytes addObject:[NSNumber numberWithInt:(data1Bytes[i]^data2Bytes[i])]];
    }
    NSData *xorData = [NSKeyedArchiver archivedDataWithRootObject:xorBytes];
    return xorData;
}
Run Code Online (Sandbox Code Playgroud)

这会运行,但给出错误的答案。当我在两个简单的数据(data1 = 0x7038和data2 = 0x0038)上对其进行测试,并使用NSLog输出值时,我得到:

data1Bytes[0] = 8070450532247943280
data2Bytes[0] = 8070450532247943168
data1Bytes[0]^data2Bytes[0] = 112
data1Bytes[1] = 10376302331560798334
data2Bytes[1] = 10376302331560798334
data1Bytes[1]^data2Bytes[1] = 0
Run Code Online (Sandbox Code Playgroud)

这让我有点困惑,因为dataXBytes数组中的值是完全错误的,但是它们将异或为正确的值!(0x70 …

objective-c xor endianness nsdata xcode5

3
推荐指数
1
解决办法
3024
查看次数

标签 统计

endianness ×1

nsdata ×1

objective-c ×1

xcode5 ×1

xor ×1