iPhone中Objective C中的字节数据类型
Posted
技术标签:
【中文标题】iPhone中Objective C中的字节数据类型【英文标题】:Byte datatype in Objective C in iPhone 【发布时间】:2010-08-05 14:55:11 【问题描述】:我想将字节发送到服务器。所以我不知道哪些数据类型用于字节。我使用了“%s”并将字节发送到服务器。但是在服务器端,他们只收到了 6 个字节。但我的情况是我想向服务器发送 32 个字节。那么使用哪种数据类型呢?
编辑:-
这是我的示例代码,
-(void)sendDevice:(NSData *)data // data value comes 32 bytes.
NSString *urlString = [NSString stringWithFormat: @"http://MyserverURL.php?Dataid=%????",[data bytes]];
NSURL *urlToSend2 = [[NSURL alloc] initWithString:urlString];
NSURLRequest *urlRequest2 = [NSURLRequest requestWithURL:urlToSend2 cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:50];
NSURLConnection *theconnection=[[NSURLConnection alloc] initWithRequest:urlRequest2 delegate:self];
[theconnection start];
请指导我。
谢谢。
【问题讨论】:
%s 把它变成一个字符串,危险!字符串在 C 中的 0 字节处终止(以及 Objective C 中),所以也许你有 6 个非零字节和下一个 0,例如并非所有字符都可以安全地出现在 URL 中(这就是我们使用 url 编码/引用的原因),所以 %s 不是一个好主意! 【参考方案1】:NSData
是通常用于字节数据的类。看看它的文档,看看这是否是你需要的。
【讨论】:
感谢您的回复。我使用了 NSData 并将字节发送到服务器。就我而言,NSData 值为 [data bytes],我如何发布到服务器,NSString *urlString = [NSString stringWithFormat: @"InMy serverurl.com/DTid=%????",[data bytes] ];【参考方案2】:正如 Jesse 所建议的,原始字节最好存储在 NSData 实例中。为了传输到您的 Web 服务器,您可能需要创建 NSData 字节的 Base64 编码字符串表示。为此,我推荐 this CocoaDev wiki page 底部的任一类别。
【讨论】:
【参考方案3】:看起来你使用 POST 数据到服务器?
喜欢:-----
- (Boolean) pushSync: (NSString *) fromContext ToContext: (NSString *) toContext
Boolean success = FALSE;
NSString *exported = [self exportData: fromContext ToContext: toContext];
if( exported != nil )
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [self getPushURL]];
if( request != nil )
NSURLResponse * response = nil;
NSError * error = nil;
[request setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[exporteddataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postBody];
[request setHTTPMethod:@"POST"];
NSData *xmlResult = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if( xmlResult )
[self parseXMLResult:xmlResult];
if([replyStatus isEqualToString:@"true"])
success = TRUE;
return success;
【讨论】:
【参考方案4】:您似乎正在尝试将数据 POST 到服务器?
看看这个问题,它可能相似并提供答案
Sending POST data from iphone over SSL HTTPS
【讨论】:
【参考方案5】:如果您使用任意数据,请先将其十六进制化,然后使用 %s。在服务器端,您可以在接收时对其进行解码。所以基本上用格式“%02x”重复sprintf并附加这些。 在这种情况下,它会在 ?就像你的例子一样。
【讨论】:
评论我自己:我看到了下面的Base64建议(更有效)但我避免了它,因为标准字母包含/,但我在链接中看到你可以指定你自己的,酷!以上是关于iPhone中Objective C中的字节数据类型的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone Objective C 中的 UIDatePicker 中禁用过去日期
Objective C to Swift代码转换,似乎无法在Swift中正确处理字节
iphone,objective c,如何从音频文件中读取原始数据(未应用编解码器)