0

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

4

1 回答 1

3

strlen()用于获取NSData*. 那是行不通的。NSData*不是 NUL 终止的。所以你最终会得到垃圾。

不要使用strlen(). 只需直接询问NSData*其尺寸即可。

或者,根本不要使用NSData*,只要求[key UTF8String]. 这交还了一个以 NUL 结尾的const char *.

于 2012-12-10T19:14:56.597 回答