stringWithBytes:length:encoding:产生错误的字符串长度

时间:2012-09-12 06:34:23

标签: ios nsstring byte

我正在尝试从目标c中的字节数组生成一个字符串。在我的课程中,我定义了以下常量char

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];

我得到一个看起来像“地狱”的字符串 - 我不确定我是否正确地做了这个长度部分,并且我假设这是问题。关于如何使其工作的任何指导?

谢谢!

2 个答案:

答案 0 :(得分:1)

在你的

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

方法,bytes只是一个指针,因此sizeof(bytes) == 4,这就解释了为什么你会看到“地狱”。

指针没有关于它指向的结构大小的信息。您必须提供大小作为附加参数,或使用以NULL结尾的C字符串。

答案 1 :(得分: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);