我有java代码为MD5 munge准备消息
private static char[] jimsCopyRight = {
'C','o','p','y','r','i','g','h', 't',':','',0xa9,''};
用于
StringBuffer message = new StringBuffer();
message.append(name.toLowerCase()); message.append(new String(jimsCopyRight));
使用
打印信息时for(int i = 0; i < message.length(); i++){
System.out.println(“i =”+ i +“char”+ message.substring(i,i + 1)+“charAT”+ message.charAt(i)); }
我得到i = 14 char \ 251 charAT \ 251,而message.toString是jimCopyright:\ 251
我需要构造一个具有相同字符的NSMutableString。
我尝试过的事情
wDevCopyright = [NSString stringWithFormat:@"jimCopyright: %c ", 0xa9];
for(int i = 0; i < [message length]; i++){
NSLog(@"i = %d char %c %d", i, [message characterAtIndex:i], [message characterAtIndex:i]);
}
这给了我i = 14 char©169
任何有助于使NSMutableString与StringBuffer相同的帮助都将受到赞赏。
问题在于,当我在MD5中使用两个字符串时,我添加0xa9会得到不同的结果。打印只是为了看看字符串。
我认为它与Java中的char []和NSMutableString的构造有关。我不相信它们是相同的价值观。
我有一些C代码,它声明版权为
#define jimsCopyRight "Copyright: � "
版权的Java MD5和C MD5是相同的。
答案 0 :(得分:2)
版权符号是你想要的,对吗?根据你的问题,这就是你得到的。那有什么问题?
(这就是为什么魔术数字不好。我无法从你的代码中分辨出你想要的编码0xa9
。)
如果你想知道它为什么说169而不是251,那是因为Java打印出八进制(base-8)字符转义序列,而C标准库,Core Foundation和Foundation打印出%d
将值作为十进制(基数为10)。 \251
不是第225个字符。使用%o
将值打印为八进制,或使用%x将其打印为十六进制(base-16)。或者,使用Calculator.app的编程模式将251从八进制转换为十进制。
顺便说一下,您可以使用%@
格式序列和NSUserName
函数将用户名插入字符串,就像在Java代码中一样。无需对其进行硬编码。
答案 1 :(得分:0)
你在Objective-C版本的“jim [s]版权所有”中遗漏了一个“s”。