2011-07-08 32 views
0

這個問題與使用一些C++ - 頭文件的ObjectiveC編寫的iOS項目相關。從套接字切換到cocoaasyncsockets(與字符串轉換有關的問題)

我正在使用此方法將消息發送到使用TCP的服務器。正如你所看到的,有一個叫做C++的方法修改了字符串以符合特定的協議。該字符串被寫入流中。

-(void) writeToServer:(NSString*) str 
{ 
    int len = [str length]; 
    const char* in_ = new char[len]; 
    char* out_ = new char[len]; 

    in_ = [str UTF8String]; 

    len = binary8BitStringTo7BitStringEncoding::encode(in_, len, out_); 

    uint8_t* test = new uint8_t[len]; 

    for (int i=0; i<len; ++i) { 
     test[i] = out_[i]; 
    } 

    [outputStream write:test maxLength:len]; 
} 

我打算使用的,而不是直接處理流的cocoaasyncsocket框架(http://code.google.com/p/cocoaasyncsocket/)。問題是:如何在使用此框架時實現相同的功能?

這是寫入使用這個框架的服務器看起來像:

NSString *warningMsg = @"Are you still there?\r\n"; 
NSData *warningData = [warningMsg dataUsingEncoding:NSUTF8StringEncoding]; 
[sock writeData:warningData withTimeout:-1 tag:WARNING_MSG]; 

這些是用於編碼和解碼的兩種方法

unsigned int decode(const char* string, unsigned int len, char* out); 
unsigned int encode(const char* string, unsigned int len, char* out); 

其實我要找的定義用於將char *(編碼方法的結果)發送到服務器的方式,但我不確定整個「NSString *將char *轉換爲uint8_t *轉換爲NSString *轉換」。使用此框架來處理這種轉換以達到相同結果的最佳方法是什麼?

在此先感謝您的答案和花費的時間!

回答

0

我想通了,等效方法是這樣的:

-(void) writeToServer:(NSString*) str{ 

    int len = [str length]; 
    const char* in_ = new char[len]; 
    char* out_ = new char[len]; 

    in_ = [str cStringUsingEncoding:NSASCIIStringEncoding]; 

    len = binary8BitStringTo7BitStringEncoding::encode(in_, len, out_); 

    [socket writeData:[NSData dataWithBytes:out_ length:len] withTimeout:-1 tag:1]; 

}