0

この質問は、いくつかの C++ ヘッダーを利用する ObjectiveC で書かれた iOS プロジェクトに関連しています。

このメソッドを使用して、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];

これらは、エンコードとデコードに使用される 2 つの方法の定義です。

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

実際、char* (encode メソッドの結果) をサーバーに送信する方法を探していますが、「NSString* から char* へ、uint8_t* から NSString* への変換」全体については不明です。

このフレームワークを使用して同じ結果を得るために、この種の変換を処理する最良の方法は何ですか?

回答と時間を割いていただきありがとうございます。

4

1 に答える 1

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];

}
于 2011-07-08T22:00:08.690 に答える