NSString到uint8_t不匹配

时间:2012-12-10 19:09:13

标签: objective-c

我正在尝试将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那会出错,但我不知道为什么!

1 个答案:

答案 0 :(得分:3)

您正在使用strlen()来获取NSData*的大小。那不行。 NSData*不是NUL终止的。所以你最后会得到垃圾。

请勿使用strlen()。只需直接询问NSData*的大小。

或者,根本不要使用NSData*,只需要[key UTF8String]。这还有NUL终止的const char *