将uint8_t []的内容复制到NSString中

时间:2013-06-19 17:35:15

标签: objective-c io objective-c++

我有一个uint_8 []字符数组,我想将它转换为NSString,但我得到了NULL。在这两种类型之间进行转换的正确方法是什么?

// Defined else where as:
uint8_t someValue[8];

someValue不是NULL并且包含一些有效字符

我试过了:

NSLog(@"converted using CString: %@", [NSString stringWithCString:(char const *)someValue encoding:NSUTF8StringEncoding]);

以及:

NSMutableData *data = [[NSMutableData alloc] init];
[data appendBytes:someValue length:sizeof(someValue)];
converted = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"converted using NSData: %@", converted);

1 个答案:

答案 0 :(得分:2)

使用:

[NSString stringWithCString:(char const *)someValue encoding:NSUTF8StringEncoding];

仅在someValue数组中存在空终止符时才有效。

您的其他解决方案无法正常工作,因为sizeof(someValue)未返回数组中的字符数,它会返回uint8_t指针的大小。

您可以使用:

NSUInteger len = ... // the actual number of characters in someValue
NSString *str = [[NSString alloc] initWithBytes:someValue length:len encoding:NSUTF8StringEncoding];

当然,这需要你知道数组中确实有多少个字符。