2010-11-20 18 views
0

Ben MD5 MungeNSMutableString stringWithFormat

private static char[] jimsCopyRight = { 

'C', 'O', 's', 'y', 'r', 'i', 'g bir mesajı hazırlar Java kodu ',' h ', ' t ',': ',' ', 0xa9,' '};

StringBuffer message = new StringBuffer(); 

message.append kullanılan

(name.toLowerCase()); message.append (yeni Dize (jimsCopyRight)); I

for(int i = 0; i < message.length(); i++){ 

System.out.println (kullanarak mesajı yazdırmak

"i = "+ i message.substring (i +" kömürü "+ i + 1)" charAt" + message.charAt (i)); }

I = 14 karakter \ 251 charAt \ 251 alır ve message.toString jimCopyright olduğu: 251

\ aynı karakterlerle bir NSMutableString inşa etmek gerekir. Ben

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]); 
} 

denedi şeylerin yanı sıra

bana i verir = 14 karakter © 169

takdir edilecektir StringBuffer aynı olacak şekilde NSMutableString almakla Herhangi bir yardım.


Sorun MD5 iki dizeleri gizleyin zaman 0xa9 eklerken ben farklı sonuçlar elde edilmesi. Baskılar sadece iplere bakmak içindir.

Java'da char [] ve NSMutableString yapısıyla ilgili bir şey olduğunu düşünüyorum. Onların aynı değerler olduğuna inanmıyorum.

Bazı C kodu var ve

#define jimsCopyRight "Copyright: � " 

telif Java MD5 ve C MD5 aynı şekilde telif beyan eder.

+0

0xa9 169, ve unicode char 169 (c) sembolüdür, bu nedenle soru gerçekten, neden java vakası char'ı 251 düşünür? – superfell

+0

Bu, java durumunuzda, çıkış akışınızın unicode olmadığını ve çıkış akışının kendisine baktığınızı ve farklı bir kodlama sonucu görüyorsanız, – superfell

+0

ystem.out.println döngüsünü değiştirirseniz görünür. ("i =" + i + "char" + message.substring (i, i + 1) + "charAT" + Tamsayı.valueOf (message.charAt (i))); char'ın hala kod noktası 169 olduğunu göreceksiniz (i = 11 char © charAT 169) – superfell

cevap

2

Telif hakkı simgesi istediğin şey değil mi? Sorunuza göre, sahip olduğun şey bu. Peki sorun ne?

(Bu sihirli sayılar kötü nedeni budur. Ne istediğini kodlama en 0xa9 yalnız kodundan söyleyemem.)

o 169 yerine 251 diyor neden merak ediyorsanız, bu Java baskılar yüzünden var sekizli (base-8) karakter çıkış sırasının dışında, C standart kütüphanesinde %d, Core Foundation ve Foundation değeri ondalık (baz-10) olarak yazdırır. \251, iki yüz elli karakter değil. Değeri sekizlik olarak yazdırmak için %o kullanın veya onaltılık olarak yazdırmak için% x (temel 16). Veya 251'i sekizlikden onluya dönüştürmek için Calculator.app'un Programlama modunu kullanın.

BTW, kullanıcı adınızı Java kodunda yaptığınız gibi dizeye eklemek için %@ biçiminde ve NSUserName işlevini kullanabilirsiniz. Bunu kodlamaya gerek yok.

+0

Cevabınız için teşekkürler, ancak bir MD5 hash sorununun hatalarını ayıklamaktayım ve dizeleri olduğunu düşündüm, ancak aslında bir CC_MD5 UTF8String sorunu. –

0

Objective-C sürümünde “jim [s] Copyright” içinde bir “s” eksiksiniz.