2012-11-14 60 views
0

我嘗試做以下設置一個UDP在iPhone應用程序是這樣的連接:轉換的NSString *爲char *與ARC

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沒有已知的類方法」。 我也想設置一個超時我的插座,當我們收到..

+0

http://stackoverflow.com/questions/589662/casting-a-nsstring-to-char-problem – R3D3vil

+0

甚至可以排除此文件中使用ARC,休息啓用ARC的文件。 –

+0

文檔&常識請... – 2012-11-14 16:12:55

回答

2

只需使用[NSString UTF8String]得到UTF-8編碼的字符串:

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

-UTF8String是一個實例方法,所以你需要使用[theHost UTF8String]將返回一個char *

0

你寫[NSString的UTF8字符串],但UTF8字符串不是一個靜態方法,所以你必須先建立一個字符串的一個實例,你可以替換該行:

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