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 に答える