0

我有为 MD5 munge 准备消息的 java 代码

private static char[] jimsCopyRight = {

'C'、'o'、'p'、'y'、'r'、'i'、'g'、'h'、't'、':'、''、0xa9、''};

用于

StringBuffer message = new StringBuffer();

message.append(name.toLowerCase()); message.append(新字符串(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是一样的。

4

2 回答 2

2

版权符号就是你想要的,对吧?根据你的问题,这就是你得到的。所以有什么问题?

(这就是魔术数字不好的原因。我不能仅从您的代码中判断0xa9您想要什么编码。)

如果您想知道为什么它说 169 而不是 251,那是因为 Java 打印出八进制(base-8)字符转义序列,而%d在 C 标准库中,Core Foundation 和 Foundation 将值打印为十进制(base- 10)。\251不是二百五十一字。用于%o将值打印为八进制,或 %x 将其打印为十六进制(base-16)。或者,使用 Calculator.app 的编程模式将 251 从八进制转换为十进制。

顺便说一句,您可以使用%@格式序列和NSUserName函数将您的用户名插入到字符串中,就像您在 Java 代码中所做的那样。无需对其进行硬编码。

于 2010-11-20T23:03:06.170 回答
0

在 Objective-C 版本的“jim[s]Copyright”中缺少一个“s”。

于 2010-11-21T09:28:04.567 回答