将NSData转换为Base-64错误

时间:2017-07-29 03:03:02

标签: ios objective-c base64 nsdata

我将 NSString转换为字节数组。没关系,然后我将 NSData转换为base64错误。如果“ 010203040506 ”是正确的但是数字很高(考试:@“333435363738”)是错误的。这是我的代码。请帮我。

在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 个答案:

答案 0 :(得分:1)

您的代码生成字符串MzQ1Njc4,它是字节0x330x340x350x360x37的bas64编码,0x38。这似乎是代码的意图。

字符串ISIjJCUm0x210x220x230x240x250x26的base64编码

请注意0x21小数为33。所以看起来你要么想要在iOS上将字符串解释为十进制,要么在Android上将其解释为十六进制。