【问题标题】:NSMutableString stringWithFormatNSMutableString stringWithFormat
【发布时间】:2010-11-20 22:28:22
【问题描述】:

我有一个为 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(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是一样的。

【问题讨论】:

  • 0xa9 是 169,unicode char 169 是 (c) 符号,所以问题真的是,为什么 java 案例认为它的 char 251?
  • 在您的 java 情况下,您的输出流似乎不是 unicode,并且您正在查看输出流本身,如果您更改循环,您会看到一些不同的编码结果到
  • ystem.out.println(" i = " + i + " char " + message.substring(i, i + 1) + " charAT " + Integer.valueOf(message.charAt(i) ));您会看到 char 仍然是代码点 169 ( i = 11 char © charAT 169)
  • @superfell: \251 是一个八进制转义序列。看我的回答。

标签: cocoa ascii nsmutablestring stringwithformat


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢你的回答,不过我在调试一个MD5哈希问题,我以为是字符串问题,其实是CC_MD5 UTF8String问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多