我有一个十六进制字节的文件。我使用 NSData 读取这个文件,然后将 NSdata 转换为 int。现在我想将文件中的第一个字节替换为其他值。示例:转换为 int 时的第一个字节是 49,我想将其更改为 48,然后将其替换到文件中。我怎样才能做到这一点?这是我的代码:
NSData *data = [NSData dataWithContentsOfFile:@"file"];
NSLog(@"Patch File: %@",data);
NSData *theData = [NSData dataWithData:[data subdataWithRange:NSMakeRange(0,1)]];
int value = *(int*)([theData bytes]);
NSLog(@"%d",value);
if( value == 49)
value = 48;
NSLog(@"%d",value);
当运行上面的代码时,它显示:
<31414142 42434344 44454546 4654502d 4c494e4b 2d544553 54000000 00000000 00000000>
我想将第一个字节替换为 0x02。我怎样才能做到这一点?非常感谢
最佳答案
“NSMutableData
”有一个非常方便的功能"replaceBytesInRange: withBytes:
"你可以用它来替换东西。
因此修改您的代码,使其看起来像这样:
NSMutableData *data = [NSMutableData dataWithContentsOfFile:@"test"];
NSLog(@"Patch File: %@",data);
int value;
[data getBytes: &value range: NSMakeRange(0,1)];
NSLog(@"%d",value);
if( value == 49)
value = 48;
[data replaceBytesInRange: NSMakeRange(0,1) withBytes: &value];
NSLog(@"%d",value);
NSError * error = nil;
BOOL success = [data writeToFile: @"file" options: NSDataWritingAtomic error: &error];
if(success == NO)
{
NSLog( @"error writing data out -- %@", [error localizedDescription]);
}
关于objective-c - 如何替换 cocoa 中的第一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094333/