2017-07-29 96 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上的十六进制数。