8

TCP/IP ストリームからデータを読み取り、既存のサーバーからバイト配列を正常に受信しています。私は今、その配列を に変換する方法を見つけようとしていますNSString。いくつかの例を見つけましたが、希望する結果を得るのに苦労しています。

NSData *data=[[NSMutableData alloc] init];

uint8_t buffer[1024];
unsigned int len=0;

len=[(NSInputStream *)stream read:buffer maxLength:1024];
if(len>0){  

    [data appendBytes:&buffer length:len];
    //BYTE ARRAY OBTAINED OK!!
    ///////////////////////////////////////////////////////

    //METHOD #1 - Yields 'nil'
    NSString *string = [[NSString alloc] initWithData:data
                                             encoding:NSUTF8StringEncoding];

    ///////////////////////////////////////////////////////
    //METHOD #2 - Log prints OK, but messageString says
    //'invalid' in debugger, and get warnings all over the 
    //place. I know this is wrong, but it semi-works :)

    size_t length=[data length];
    unsigned char aBuffer[length];
    [data getBytes:aBuffer length:length];
    aBuffer[length - 1]=0;

    NSString *messageString =aBuffer; 
    NSLog (@"%s",messageString);

    ///////////////////////////////////////////////////////

}else{
    NSLog(@"No Buffer");
}

助けてください!提供される支援は大歓迎です。

4

3 に答える 3

19

答えがわかりました。

これを変更する必要がありました:

NSString *string = [[NSString alloc] initWithData:data
                                         encoding:NSUTF8StringEncoding];

これに:

NSString *string = [[NSString alloc] initWithData:data
                                         encoding:NSASCIIStringEncoding];
于 2009-04-10T20:51:53.930 に答える
4

これは間違っています:

[data appendBytes:&buffer length:len];

そのはず:

[data appendBytes:buffer length:len];
于 2009-04-10T20:44:32.760 に答える
-1
NSString* string = [NSString stringWithUTF8String: data];

明らかに、データが null で終了していることを確認してください。

于 2009-04-10T20:43:12.047 に答える