【问题标题】:Byte datatype in Objective C in iPhoneiPhone中Objective C中的字节数据类型
【发布时间】: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 不是一个好主意!

标签: iphone byte types


【解决方案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建议(更有效)但我避免了它,因为标准字母包含/,但我在链接中看到你可以指定你自己的,酷!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 2011-01-25
        相关资源
        最近更新 更多