首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在目标C中编写二进制文件?

如何在目标C中编写二进制文件?
EN

Stack Overflow用户
提问于 2015-10-04 06:19:20
回答 1查看 1.7K关注 0票数 0

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

代码语言:javascript
运行
复制
  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 *。但是,我在文件中获得了额外的格式,比如尖括号和空格:

代码语言:javascript
运行
复制
...
<17700000 16c0f710 c78a2660 1570f960 c78926>
<17710060 17d0f800 c98826d0 2160f990 cb8d26>
...

这些是从哪里来的?我如何才能真正地只写二进制数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-04 06:33:47

镇静些。NSData是一个字节数组--不多也不差。您所看到的只是对日志记录过程所做工作的一个虚构。试试这个:

代码语言:javascript
运行
复制
NSArray <NSString*>* arr = @[@"Mannie", @"Moe", @"Jack"];
NSData *data = 
    [[arr componentsJoinedByString:@"\n"] dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", data);

控制台输出:

代码语言:javascript
运行
复制
<4d616e6e 69650a4d 6f650a4a 61636b>

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

如果你真的不相信我,就用这样的方式印出来:

代码语言:javascript
运行
复制
char buffer[100];
[data getBytes:buffer length:data.length];
for (NSUInteger i = 0; i < data.length; i++) {
    NSLog(@"%02x", buffer[i]);
}

输出只是字符字节:

代码语言:javascript
运行
复制
4d
61
6e
6e
69
65
0a
4d
6f
65
0a
4a
61
63
6b
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32930616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档