我正在尝试将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 :(得分:3)
您正在使用strlen()
来获取NSData*
的大小。那不行。 NSData*
不是NUL终止的。所以你最后会得到垃圾。
请勿使用strlen()
。只需直接询问NSData*
的大小。
或者,根本不要使用NSData*
,只需要[key UTF8String]
。这还有NUL终止的const char *
。