2009-04-10 6 views
6

TCP/IPストリームからデータを読み込み、既存のサーバーからバイト配列を正常に受信しています。私は今、配列をNSStringに変換する方法を見つけようとしています。私はいくつかの例を見つけましたが、私の望む結果を得るのは苦労しています。バイト配列を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"); 
} 

助けてください!提供された援助は大いに感謝しています。

+0

なぜdownvotes:これに

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

は、私はこれを変更しなければなりませんでしたか? – Dutchie432

答えて

15

私は答えを得ました。

NSString *string = [[NSString alloc] initWithData:data 
             encoding:NSASCIIStringEncoding]; 
+0

これを答えとしてマークしてください –

+0

素晴らしい!私は2日間このことに苦しんできた...素晴らしい発見! – samiq

+0

なぜdownvotes? – Dutchie432

-1

データがヌルで終了していることを確認してください。

4

これは間違っている:

[data appendBytes:&buffer length:len]; 

それは次のようになります。

[data appendBytes:buffer length:len]; 
+0

私は "&"と "*"記号について勉強する必要があると思われます:) – Dutchie432