簡體   English   中英

iOS base64編碼錯誤?

[英]iOS base64 encoding bug?

我想base64編碼一個NSString。 但是得到了錯誤的結果。 是iOS base64編碼的錯誤嗎? 字符[]中的整數是字符的ASCII碼。

int characters[] = {119,38,149,28,73,136,86,199,8,225,36,222,129,63,27,102,41,227,39,113,90, 
             92,150,117,130,106,134,255,182,11,0,198,110,41,175,208,158,57,211,197}; 
 int i = 0; 
 NSString *result = [[NSString alloc] init]; 
 while ( i < 40) { 

     NSString *tempString = [NSString stringWithFormat:@"%c", characters[i]]; 
     result = [result stringByAppendingString:tempString]; 
     i++; 
 } 

 NSData *tempData = [result dataUsingEncoding:NSISOLatin1StringEncoding]; 
 NSString *b64String = [tempData base64EncodedStringWithOptions:0]; 
 NSLog(@"%@",b64String); 

使用上面的代碼,我得到b64String的結果:

dyaVHEmIVscI4STegT8bZinjJ3FaXJZ1gmqG / 7YLxm4pr9CeOdPF

但是正確的答案應該是:

dyaVHEmIVscI4STegT8bZinjJ3FaXJZ1gmqG / 7YLAMZuKa / QnjnTxQ ==

有人可以幫助我找到正確的答案嗎?

問題是數組中的值為0 0轉換為char 0,這是用於字符串終止的特殊字符( null )。 顯然,iOS Objective-C對這種特殊字符的處理方式與Python不同,這就是為什么您得到不同結果的原因。

null字符不應在“正常”字符串的中間找到。 您還具有不應該在“普通”字符串中找到的ASCII碼8backspace )。

刪除那些特殊字符時,您應該得到相同的結果。

編輯:

為了清楚起見,問題不在於base64編碼。 Base64可以毫無問題地處理二進制數據(當然,值0和8)。 問題是您從整數值轉換為char值。

我不是Objective-C專家,但是由於您似乎正在處理二進制數據,因此您可能有興趣嘗試執行以下操作:

Byte bytes[] = {119,38,149,28,73,136,86,199,8,225,36,222,129,63,27,102,41,227,39,113,90, 
         92,150,117,130,106,134,255,182,11,0,198,110,41,175,208,158,57,211,197}; 
NSData *tempData = [NSData dataWithBytes:bytes length:40];
NSString *b64String = [tempData base64EncodedStringWithOptions:0]; 
NSLog(@"%@",b64String);   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM