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中的字节数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在objective-c中将字节值转换为int

在 iPhone Objective C 中的 UIDatePicker 中禁用过去日期

Objective C to Swift代码转换,似乎无法在Swift中正确处理字节

iphone,objective c,如何从音频文件中读取原始数据(未应用编解码器)

Objective-C:如何从 .NET 的 BitConverter 类中读取数据

如何使用 Objective C iOS 从 iPhone X 中的表格视图顶部删除多余的空间