2017-07-29 93 views
0

我將NSString轉換爲字節數組。它沒問題,然後我轉換NSData到base64是錯誤的。如果「」是正確的但是數量很大(考試:@「333435363738」)是錯誤的。這是我的代碼。請幫幫我。將NSData轉換爲Base-64錯誤

在Android中:ISIjJCUm和iOS:MzQ1Njc4。

NSString *command = @"333435363738"; 
NSMutableData *commandToSend= [[NSMutableData alloc] init]; 
unsigned long whole_byte; 
char byte_chars[3] = {'\0','\0','\0'}; 
int i; 
for (i=0; i < [command length] /2; i++) { 
    NSLog(@"%d",[command characterAtIndex:i*2]); 
    NSLog(@"%d",[command characterAtIndex:i*2 + 1]); 
    byte_chars[0] = [command characterAtIndex:i*2]; 
    byte_chars[1] = [command characterAtIndex:i*2 + 1]; 
    whole_byte = strtol(byte_chars, NULL, 16); 
    [commandToSend appendBytes:&whole_byte length:1]; 
} 



NSString *base64String; 
if ([commandToSend respondsToSelector:@selector(base64EncodedStringWithOptions:)]) { 
    base64String = [commandToSend base64EncodedStringWithOptions:kNilOptions]; // iOS 7+ 
} else { 
    base64String = [commandToSend base64Encoding];        // pre iOS7 
} 

回答

1

你的代碼產生串MzQ1Njc4這是字節0x330x340x350x360x370x38的bas64編碼。這似乎是代碼的意圖。

字符串ISIjJCUm0x210x220x230x240x250x26的base64編碼。

請注意0x2133十進制。所以看起來你要麼將該字符串解釋爲iOS上的十進制數,要麼將其解釋爲Android上的十六進制數。