NSMutableString stringWithFormat - PullRequest
       8

NSMutableString stringWithFormat

0 голосов
/ 21 ноября 2010

У меня есть 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 (новая строка (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]);
 }

Что дает мне я = 14 символов © 169

Буду признателен за любую помощь в том, чтобы NSMutableString был таким же, как StringBuffer.


Проблема в том, что, когда я прохожу две строки в MD5, я получаю разные результаты, когда добавляю 0xa9. Отпечатки только для того, чтобы взглянуть на струны.

Я думаю, что это как-то связано с char [] в Java и конструкцией NSMutableString. Я не верю, что это одинаковые ценности.

У меня есть некоторый C-код, и он объявляет авторское право

#define jimsCopyRight  "Copyright: � "

Java MD5 и C MD5 авторских прав одинаковы.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2010

Символ авторского права - это то, что вы хотели, верно?По твоему вопросу это то, что ты получил.Так в чем же проблема?

(Вот почему магические числа плохие. Я не могу сказать по вашему коду, какую кодировку 0xa9 вы хотели.)

Если вам интересно, почемуон говорит 169 вместо 251, потому что Java печатает восьмеричную (восьмеричную) символьную escape-последовательность (base-8), тогда как %d в стандартной библиотеке C, Core Foundation и Foundation выводит значение как decimal (основание-10).\251 - это не двести пятьдесят первый символ.Используйте %o, чтобы вывести значение в восьмеричном виде, или% x, чтобы вывести его как шестнадцатеричное (base-16).Или используйте режим программирования Calculator.app для преобразования 251 из восьмеричного в десятичное число.

Кстати, вы можете использовать последовательность форматирования %@ и функцию NSUserName, чтобы вставить свое имя пользователя в строку, как высделал в коде Java.Не нужно жестко его кодировать.

0 голосов
/ 21 ноября 2010

Вам не хватает «s» в «jim [s] Copyright» в версии Objective-C.

...