0

Objectivecのバイト配列から文字列を生成しようとしています。私のクラス内で、次の定数文字を定義します

static const char HELLO_WORLD[] = {0x68,0x65,0x6c,0x6c,0x6f,0x20,0x77,0x6f,0x72,0x6c,0x64,0x0d,0x0a};

次に、MyClassに次のようなメソッドがあります。

+ (NSString *)stringFromBytes:(const void*)bytes
{
    return [[NSString alloc] initWithBytes:bytes length:(sizeof(bytes)/sizeof(bytes[0])) encoding:NSUTF8StringEncoding];
}

これを実行してメソッドを呼び出すと

[MyClass stringFromBytes:HELLO_WORLD];

「地獄」のような文字列が表示されます。これの長さの部分を正しく実行しているかどうかはわかりませんが、それが問題であると想定しています。それを機能させる方法についてのガイダンスはありますか?

ありがとう!

4

2 に答える 2

1

あなたの

+ (NSString *)stringFromBytes:(const void*)bytes

メソッドbytesは単なるポインターであるためsizeof(bytes) == 4、「地獄」が表示される理由を説明しています。

ポインターには、それが指す構造体のサイズに関する情報はありません。追加の引数としてサイズを指定するか、NULL で終わる C 文字列を操作する必要があります。

于 2012-09-12T07:21:50.947 に答える
0

これを行う:

+ (NSString *)stringFromBytes:(const char[])charbytes length:(NSUInteger)length
{
  return [[NSString alloc] initWithBytes:charbytes length:length encoding:NSUTF8StringEncoding];
}

次のように使用します。

 NSString *str = [MyClass stringFromBytes:HELLO_WORLD length:sizeof(HELLO_WORLD)];
 NSLog(@"%@",str);
于 2012-09-12T06:52:36.463 に答える