2017-07-29 11 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

コードはバイト0x33のbas64エンコード文字列MzQ1Njc40x340x350x360x370x38を生成します。これはコードが意味するものであるように見えます。

ISIjJCUm

ストリングは0x210x220x230x240x250x26のbase64エンコーディングです。

0x21は、33小数です。だから、文字列をiOS上で10進数として解釈するか、Android上で16進数として解釈するかのいずれかと思われます。

関連する問題