0

我正在尝试从目标 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];

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

谢谢!

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 回答