0

这个问题与一个用 ObjectiveC 编写的 iOS 项目有关,该项目使用了一些 C++-Headers。

我正在使用这种方法将消息发送到使用 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-framework (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* 的转换。

使用此框架处理这种转换以达到相同结果的最佳方法是什么?

提前感谢您的回答和所花费的时间!

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 回答