2012-12-10 61 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]做了這份工作,謝謝! –