【问题标题】:Insert bytes at front in NSMutableData在 NSMutableData 的前面插入字节
【发布时间】:2014-07-08 01:05:30
【问题描述】:

如何在NSMutableData 的开头插入一个字节?我知道有一个 replaceBytesInRange: 方法,但这只会替换字节。有一堆 insertXAtIndex: 方法,但没有一个是用于字节的。我怎样才能做到这一点?我能想到的一种方法是:

NSMutableData *theData = [NSMutableData dataWithBytes:myByte];
[theData appendData:myOriginalData];
myOriginalData = nil;

但一定有更好的办法。

我也试过了,但是没用:

char *sec = "Second!";
char *fir = "First!";

NSMutableData *theData = [NSMutableData dataWithBytes:(const void *)sec length:7];
[theData replaceBytesInRange:NSMakeRange(0, 0) withBytes:(const void *)fir];

NSString *str1 = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
NSLog(@"%@", str1); //Prints "Second!"

【问题讨论】:

  • 我没试过但是用replaceBytesInRange:withBytes:但是指定一个零长度范围呢?
  • @rmaddy 我试过了,但也没有用。请查看我的编辑以确保我明白您的意思。
  • 我猜这行不通。它必须查看范围长度才能知道从 'withBytes:` 参数中获取多少字节。
  • @rmaddy 经过测试,是的。
  • @rmaddy 您的理论是正确的,即零长度范围可以做到这一点。诀窍是您可以指定字节的长度。

标签: objective-c insert nsdata nsmutabledata


【解决方案1】:
[theData replaceBytesInRange:NSMakeRange(0, 0) withBytes:(const void *)fir length:strlen(fir)];

应该做的伎俩。

【讨论】:

  • 不。只是代替第二!第一!。
  • 啊,strlen 中有错误的字符串。现在它打印“第一!第二!”对我来说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多