2012-12-10 33 views
0

我试图将NSString转换为uint8_t。我遇到的问题是NSString和结果uint8_t变量不匹配。下面是一些示例代码:NSString与uint8_t不匹配

NSLog(@"Key now: %@", key); 
NSData* keyData = [key dataUsingEncoding:NSUTF8StringEncoding]; 

const uint8_t *plainBuffer = (const uint8_t*)[data bytes]; 
size_t plainBufferSize = strlen((char *) plainBuffer); 
NSLog(@"Plain buffer: %s", plainBuffer); 

NSData* testData = [[NSData alloc] initWithBytes: plainBuffer length:plainBufferSize]; 
NSString* testString = [[NSString alloc] initWithData: testData encoding: NSUTF8StringEncoding]; 
NSLog(@"Test string: %@", testString); 

而且输出示例:

Key now: 9iIWBpf5R6yu5pJ93l218RsMdWBLidXt 
Plain buffer: 9iIWBpf5R6yu5pJ93l218RsMdWBLidXtMdWBLidXt 
Test string: 9iIWBpf5R6yu5pJ93l218RsMdWBLidXtMdWBLidXt 

显然其NSData的 - > uint8_t一步多数民众赞成去错了,但我不知道为什么!

+0

纠正我,如果我错了,但不' - [NSString dataUsingEncoding:]'丢弃终止NUL字节?你为什么不简单地使用' - [NSString UTF8String]'而不是? – 2012-12-10 19:13:05

回答

3

您正在使用strlen()来获取NSData*的大小。这是行不通的。 NSData*不是NUL终止的。所以你最终会得到垃圾。请使用strlen()。请直接询问NSData*的尺寸。

或者,根本不要使用NSData*,只需要询问[key UTF8String]。这回传NUL终止const char *

+0

啊,所以基本上我认为:)另一个反对冗余的论点。 – 2012-12-10 19:16:07

+0

这两个优点,切换到[关键UTF8String]做了这份工作,谢谢! –