【发布时间】:2015-01-13 05:33:57
【问题描述】:
我想对一个 NSString 进行 base64 编码。却得到了错误的结果。是iOS base64编码的bug吗? characters[] 中的 int 数字是字符的 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 通常用作字符串结束字符,并且在您的 for 循环中可能没有正确格式化(甚至可能被跳过)。我很想用 1 而不是 0 再次测试它。
-
用Python中类似的代码,我可以得到正确答案。我想知道如何让它在 iOS 中工作。因为在我的程序中,我需要对字符串进行 base64 编码,我的代码 99% 都可以工作。有 1% 的机会,它会输出错误的答案。
-
要解决它,我们必须先找到问题。请通过将 0 替换为其他内容来进行测试。如果这样你在 Python 和你的代码中得到相同的结果,那么我们就会知道我们必须修复什么。
标签: ios objective-c base64 encode