如何在Objective C中编写二进制文件?

时间:2015-10-04 06:19:20

标签: ios objective-c

我想将二进制数据写入文件并将其添加为电子邮件附件。

  MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
  picker.mailComposeDelegate = self;
  NSData *data = [[self.samples componentsJoinedByString:@"\n"] dataUsingEncoding:NSUTF8StringEncoding];
  [picker addAttachmentData:data mimeType:@"application/octet-stream" fileName:filename];

addAttachmentData期望传递NSData *(尽管我更喜欢字节数组)。样本是NSMutableArray *。我在文件中得到了额外的格式,但我不想要它,比如尖括号和空格:

...
<17700000 16c0f710 c78a2660 1570f960 c78926>
<17710060 17d0f800 c98826d0 2160f990 cb8d26>
...

这些来自哪里?我怎样才能真正写出二进制数据?

1 个答案:

答案 0 :(得分:4)

冷静下来。 NSData 一个字节数组 - 不多也不少。你所看到的只是记录过程的作用。试试这个:

NSArray <NSString*>* arr = @[@"Mannie", @"Moe", @"Jack"];
NSData *data = 
    [[arr componentsJoinedByString:@"\n"] dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", data);

控制台输出:

<4d616e6e 69650a4d 6f650a4a 61636b>

只是NSLog让事情更整洁。字节只是2位十六进制数值;数据中没有尖括号和空格。

如果你真的不相信我,请用这种方式打印:

char buffer[100];
[data getBytes:buffer length:data.length];
for (NSUInteger i = 0; i < data.length; i++) {
    NSLog(@"%02x", buffer[i]);
}

输出只是字符字节:

4d
61
6e
6e
69
65
0a
4d
6f
65
0a
4a
61
63
6b