我正在尝试从目标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];
我得到一个看起来像“地狱”的字符串 - 我不确定我是否正确地做了这个长度部分,并且我假设这是问题。关于如何使其工作的任何指导?
谢谢!
答案 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);