2012-02-08 24 views
0

変換を実行した後、私は奇妙なNSString値を取得しています。たとえば、私は応答として格納されている値2(00000010)の1バイトを持っています。私はNSString initWithDataとinitWithBytesの両方を試しましたが、どちらも奇妙なシンボル(疑問符は逆さま)を返します。 NSDataからNSStringに正しく変換するには?

NSString *command1 = [[NSString alloc] initWithData:response encoding:NSASCIIStringEncoding]; 
NSString *command2 = [[NSString alloc] initWithBytes:[response bytes] length:[response length] encoding:NSASCIIStringEncoding]; 

NSLog(@"command1: %@", command1); 
NSLog(@"command2: %@", command2); 

はまたNSUTF8StringEncodingを試みたが、NSASCIIStringEncodingは、データをシンボルあたり1つのバイトコード化されていますので、正しいものである:ここに私のコードです。

+2

あなたは何を期待していますか?値が '2'のバイトはSTXまたはテキストの開始です。このバイトから何をやりたいのですか? –

+1

何を得る予定ですか? asciiテーブルの32文字までのすべての文字は、制御文字と見なされ、適切な表現ができません。 – Eimantas

+0

応答はバイトにエンコードされた数字です。たとえば、00000010から2を解析する必要があります。 – Centurion

答えて

1

私が読んでいたものから、これはあなたが望むものである:それはただ単にそれに各バイトを変換し

NSString *stringWithContentsOfBinaryData(NSData *data) 
{ 
    NSMutableString *output; 

    int len = [data length]; 
    uint8_t *bytes = [data bytes]; 
    for (int i = 0; i < len; i++) 
    { 
     [output appendFormat:@"%i", bytes[i]]; 
    } 

    return output; 
} 

は、整数の表現だと文字列の中にそれを連結します。

1

ASCIIは必ずしも正しいエンコーディングではありません。 ASCIIは、0x000x7Fの間の文字のみを定義します。応答がHTTP応答で、HTTP Content-Typeヘッダにエンコーディングが指定されていない場合、デフォルトはISO-8859-1です。NSISOLatin1StringEncoding

使用するエンコーディングは関係ありません。 (0x00-0x1F)は、必ずしも印刷可能であるとは限らない。

関連する問題