objective-c - 如何替换 cocoa 中的第一个字节

标签 objective-c macos cocoa nsdata

我有一个十六进制字节的文件。我使用 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/

相关文章:

iphone - UIImage 不是编译时常量,Xcode 4

macos - Docker:无法启动服务应用程序:OCI 运行时创建失败:

macos - 深色模式 : NSColor. colorNamed 在某些方法中不会返回正确的颜色

cocoa - 如何在WebView中启用弹性?

ios - 在 Swift 中使用闭包作为唯一参数初始化对象

objective-c - Objective-C 的 "stringWithFormat:"方法发生了什么?

iOS 9.3 无法使用在 iPad 上运行的 iPhone App 从照片库获取缩略图

ios - 将文档目录的路径传递给 xcode 运行脚本

android - LG 设备未在 ADB 设备中列出

objective-c - 将 NSTextView 的内容保存为纯文本文件