NSMutableString stringWithFormat
-
26-09-2019 - |
Pregunta
Tengo java código que prepara un mensaje para un MD5 munge
private static char[] jimsCopyRight = {
'C', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 'T', ':', '', 0xa9, ' '};
que se utiliza en
StringBuffer message = new StringBuffer();
message.append (name.toLowerCase ()); message.append (nuevo String (jimsCopyRight));
Al imprimir el mensaje usando
for(int i = 0; i < message.length(); i++){
System.out.println ( "i = "+ i +" char "+ message.substring (i, i + 1) +" charAt" + message.charAt (i)); }
consigo i = 14 Char \ 251 charat \ 251 y el message.toString es jimCopyright: \ 251
I necesidad de construir un NSMutableString con los mismos caracteres.
Entre las cosas que me han tratado
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]);
}
Lo que me da i = 14 Char © 169
Cualquier ayuda en la obtención de la NSMutableString a ser el mismo que se observará el StringBuffer.
El problema es que cuando Munge las dos cadenas en MD5 me da resultados diferentes cuando agrego el 0xa9. Las impresiones son sólo para conseguir un vistazo a las cuerdas.
Estoy pensando que tiene algo que ver con el char [] en Java y la construcción de la NSMutableString. No creo que son los mismos valores.
Tengo algo de código C y se declara el derecho de autor como
#define jimsCopyRight "Copyright: � "
El Java MD5 y C MD5 de los derechos de autor son los mismos.
Solución
El símbolo de derechos de autor es lo que querías, ¿verdad? De acuerdo a su pregunta, eso es lo que tienes. Entonces, ¿cuál es el problema?
(Esta es la razón por números mágicos son malos. No puedo decir de su código de codificación solo lo 0xa9
que quería.)
Si usted se pregunta por qué se dice 169 en lugar de 251, que se debe a que las impresiones de Java fuera del octal (base-8) de la secuencia de caracteres de escape, mientras que %d
en la biblioteca estándar de C, Fundación Core, e imprime la Fundación el valor como decimal (base-10). \251
no es los doscientos cincuenta y primer carácter. Utilice %o
para imprimir el valor como octal, o% x imprimirlo como hexadecimal (base-16). O bien, utilizar el modo de programación de Calculator.app para convertir 251 de octal a decimal.
Por cierto, puede utilizar la secuencia de formato %@
y la función NSUserName
para insertar su nombre de usuario en la cadena, al igual que lo hizo en el código Java. No hay necesidad de codificar la misma.
Otros consejos
Te estás perdiendo una “s” en “Jim [s] Derechos de autor” en la versión de Objective-C.