NSMutableString stringWithFormat

时间:2010-11-20 22:28:23

标签: cocoa ascii nsmutablestring stringwithformat

我有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是相同的。

2 个答案:

答案 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”。