用NSData玩转二进制文件的读写

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *path = @"/Users/billchen/Desktop/f1.rtf";	
    NSString *temp = @"Hello Friend";
    int i = 100;
    float f = 98.3333f;
    NSMutableData *writer = [[NSMutableData alloc] init];
    [writer appendData:[temp dataUsingEncoding:NSUTF8StringEncoding]];
    [writer appendBytes:&i length:sizeof(i)];//&表示取址
    [writer appendBytes:&f length:sizeof(f)];
    [writer writeToFile:path atomically:YES];
    [writer release];
    
    int ii;
    float ff;
    NSString *ttemp;
    NSData *reader = [NSData dataWithContentsOfFile:path];
    ttemp = [[NSString alloc]initWithData:[reader subdataWithRange:NSMakeRange(0, [temp length])] encoding:NSUTF8StringEncoding];
    [reader getBytes:&ii range:NSMakeRange([temp length], sizeof(ii))];
    [reader getBytes:&ff range:NSMakeRange([temp length] + sizeof(ii), sizeof(ff))];
    NSLog(@"string:%@ int:%i float:%f", ttemp, ii, ff);
    [temp release];
    [ttemp release];
    [path release];

    [pool drain];
    return 0;
}
  • &用于取址,获取指针
  • NSMakeRange 用于生成NSRange

返回结果:

[Switching to process 13606 thread 0x0]
2011-05-09 13:24:04.962 demo09[13606:903] string:Hello Friend int:100 float:98.333298

posted @ 2011-05-09 13:14  chenjunbiao  阅读(2663)  评论(0编辑  收藏  举报