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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top