【问题标题】:Increase Byte Values in NSData增加 NSData 中的字节值
【发布时间】:2013-02-03 00:45:02
【问题描述】:

我有一个包含随机 ASCII 字节的 NSMutableData。 我想将这些字节的值移动一个值 (X)。

所以让我们说我有这样的事情:

02 00 02 4e 00

我现在想将每个字节增加 0x01 以获得:

03 01 03 4f 01

最好的方法是什么?

【问题讨论】:

  • 迭代并为每个字节添加一个。 (这是一个技巧问题吗?)

标签: nsdata nsmutabledata


【解决方案1】:

使用mutableBytes 获取指向字节的指针,并将它们视为普通的 C 数组。

uint8_t originalBytes[] = {0x02, 0x00, 0x02, 0x4e, 0x00};
NSMutableData * myData = [NSMutableData dataWithBytes:originalBytes length:5];

uint8_t * bytePtr = [myData mutableBytes];

for(int i = 0; i < [myData length]; i++) {
    bytePtr[i] += 0x01;
}

NSLog(@"%@", myData);

二进制数据编程指南文章“Working With Mutable Binary Data”中有更多信息。

另外,你所做的不是“移动”,而只是添加 0x01。 “Shifting”通常是指“bit shifting”。

【讨论】:

    【解决方案2】:

    类似这样的:

    NSString *_chars = @"abcd";
    NSMutableData *_data = [NSMutableData dataWithBytes:[_chars UTF8String] length:_chars.length];
    
    NSLog(@"Bef. : %@", _data);    
    for (int i = 0; i < _data.length; i++) ((char *)[_data mutableBytes])[i]++;
    NSLog(@"Aft. : %@", _data);    
    

    日志显示结果:

    Bef. : <61626364>
    Aft. : <62636465>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 2012-01-31
      • 2018-07-31
      相关资源
      最近更新 更多