【问题标题】:Converting NSString* to char* with ARC使用 ARC 将 NSString* 转换为 char*
【发布时间】:2012-11-14 15:58:54
【问题描述】:

我正在尝试在这样的 Iphone 应用程序中设置 udp 连接:

 struct sockaddr_in server_address;
 CFDataRef server_address_data;
  ....      


  memset(&server_address, 0, sizeof(server_address));
  server_address.sin_len = sizeof(server_address);
  server_address.sin_family = AF_INET;
  server_address.sin_port = htons(thePort);      
  inet_aton([theHost cStringUsingEncoding:[NSString UTF8String]], &server_address.sin_addr);
  // put server address into CFData
  server_address_data = CFDataCreate(NULL, (uint8_t *) &server_address, sizeof(server_address));
  // set timeout (ACK and RESULT packets) for socket
  ????

现在,我遇到了以下问题:变量 theHost 来自 TextField,并且是 NSString* 类型。我想从中获取 IP 地址,因此尝试 inet_aton,它需要一个 char *。如何转换它(使用 ARC)?我上面的尝试失败了,因为“选择器 UTF8String 没有已知的类方法”。 我还想为我的套接字设置一个超时时间,以便我们收到..

【问题讨论】:

标签: objective-c xcode network-programming


【解决方案1】:

只需使用[NSString UTF8String] 即可获取UTF-8 编码的字符串:

inet_aton([theHost UTF8String], &server_address.sin_addr);

【讨论】:

    【解决方案2】:

    -UTF8String是一个实例方法,所以你需要使用[theHost UTF8String],它会返回一个char *

    【讨论】:

      【解决方案3】:

      您编写了 [NSString UTF8String],但 UTF8String 不是静态方法,因此您必须首先创建字符串的实例,您可以将该行替换为:

      inet_aton([theHost cStringUsingEncoding:[@"String that you want" UTF8String]], &server_address.sin_addr);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-17
        • 2012-02-29
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多