将C转换为Obj-C文件读取代码

时间:2012-01-19 23:41:31

标签: objective-c cocoa binary

我有这个文件,我需要读取第一个字节来检查信息。 我不需要加载整个文件,只需要开头.. C中的代码或多或少是以下内容。这是一个很大的代码,所以我在这里写了基本功能。

现在我想让它成为100%Objective-C,但我找不到合适的方法。

FILE *f;
char *buf;

f = fopen ("/Users/foo/Desktop/theFile.fil", "rb");

if(f) {
fseek(f , 0 , SEEK_END);
size = ftell(f);
rewind (f);
buf = (char*) malloc (sizeof(char)*size);
switch( ntohl(*(uint32 *)buf) ) {
    case 0x28BA61CE:
    case 0x28BA4E50:
        NSLog(@"Message");
    break;
}

fclose(f);
free (buf);

我接下来最接近的是:

NSData *test = [[NSData alloc] initWithContentsOfFile:filePath];

这让我得到了所有二进制文件,但无论如何,我卡住了。最好尝试从头开始......

任何帮助表示赞赏!

4 个答案:

答案 0 :(得分:4)

嗯,有效的C代码是有效的Objective-C代码。所以这已经在Objective-C中了。

你的实际目标是什么?你想用这个文件做什么?是否有理由不能使用NSData

答案 1 :(得分:1)

C代码已经是Obj-C。只使用你已经在做的事情是完全合理的。但是如果您使用Obj-C对象来执行此操作,那么您需要查看NSInputStream

答案 2 :(得分:0)

  

我接下来最接近的是:

NSData *test = [[NSData alloc] initWithContentsOfFile:filePath];
     

这让我得到了所有二进制文件,但无论如何,我卡住了。

目前还不清楚你被困在哪里,因为这是(最简单的)正确的方式来读取Cocoa中的一个大问题。您已成功读取该文件;没有什么可以做的。

如果您要继续switch语句,则指向它所读取的字节的指针为[test bytes]。这是您要分配给buf的指针。请参阅the NSData documentation

答案 3 :(得分:0)

嗯..我把它整理出来了......接下来做了什么。

干杯并感谢您的帮助!

NSString *filePath = [[NSString alloc] initWithFormat:@"/Users/foo/Desktop/theFile.fil"];

NSData *data = [NSData dataWithContentsOfFile:filePath];
NSUInteger len = [data length];
Byte *byteData = (Byte*)malloc(len);
memcpy(byteData, [data bytes], len);

NSNumber *size = [[NSNumber alloc] initWithUnsignedLong:len/2^20];

NSLog(@"%@", size);

switch( ntohl(*(uint32 *)byteData) ) {
    case 0x28BA61CE:
    case 0x28BA4E50:
        NSLog(@"Message");
    break;
}
[size release];
[filePath release];