如何将二进制数据转换为 NSstring?

Posted

技术标签:

【中文标题】如何将二进制数据转换为 NSstring?【英文标题】:How to convert binary data to NSstring? 【发布时间】:2011-03-08 16:32:11 【问题描述】:

使用 AVAudioRecorder 录制后,必须将生成的声音文件发送到网络服务。文件数据必须经过 URL 编码并复制到 POST 请求的正文中。录音格式为 kAudioFormatAppleLossless。 作为第一步,在 URL 编码之前,我尝试使用

将 .caf 文件复制到 NSString
NSStringEncoding encoding;
 NSString * filestring = [NSString 
                         stringWithContentsOfURL:self.audioRecorder.url 
                     usedEncoding:&encoding 
                         error:&error];

我收到以下错误:

Error Domain=NSCocoaErrorDomain Code=264 "操作无法完成。(Cocoa 错误 264。)"

返回的编码是 0x5bab9f0,它不在为 NSStringEncoding 定义的值列表中。 写入文件时 AVAudioRecorder 使用什么编码?将二进制文件转换为 URL 编码字符串的最佳方法是什么?

【问题讨论】:

【参考方案1】:

从来没有。采用。 NSString。为了。数据。那是。不是。 A. 字符串... 使用 NSData 代替,您不需要对其进行 URLEncode(因为它“已经是”)。

你可以用这个:

NSMutableData *postData = [[NSMutableData alloc] init];
[postData appendData:[@"--boundary\r\nContent-Disposition: form-data; name=\"myfile\"; filename=\"ad.gif\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[NSData dataWithContentsOfURL:self.audioRecorder.url]];
[postData appendData:[@"\r\n--boundary--\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

[myRequest setHTTPMethod:@"POST"]; // this you probably already did.
[myRequest setHTTPBody:postData];

【讨论】:

文件内容必须作为参数复制到 POST 正文中,而不是作为表单数据发送。尝试使用 NSData,但结果不符合服务器的预期,见下文: sendFileRequest = [ASIFormDataRequest requestWithURL:myURL]; NSData * 数据 = [NSData dataWithContentsOfURL:audioRecorder.url]; [sendFileRequest setPostValue:data forKey:kParamRecordBinaryContent]; 您是否使用 $_FILES['myfile']; 请求文件(如果您使用的是 php)?顺便提一句。你正在使用 NSURLConnection + NSMutableURLRequest,对吧? 它将转到一个网络服务。然而,发现的二进制数据必须首先为服务器进行 base64 编码,所以最终的解决方案是 'NSString * encodedString = [QSStrings encodeBase64WithData:[NSData dataWithContentsOfURL:audioRecorder.url]];'另见link非常感谢您的帮助

以上是关于如何将二进制数据转换为 NSstring?的主要内容,如果未能解决你的问题,请参考以下文章

如何将负二进制数转换为int?

java中如何将字符串转换为二进制数

iOS开发进制转换

如何将二进制表示的数字转换为雪花数

急!!!数据结构(C语言版) 如何将十进制小数转换成二进制数

求c语言将十进制数转换为16进制的函数