2011-09-26 88 views
3

我有一個編碼字符串的c#代碼。我正在嘗試在目標c中編寫相應的例程。編碼沒有在目標中給出正確的結果c

的代碼如下:

// c# code 
public static string Encode(Guid guid) 
{ 
    string encode = convert.ToBase64String(guid.ToByteArray()); 
    encode = encoded.Replace("/","_").Replace("+","-"); 
    return encoded.substring(0,22); 
} 

我已經寫在目標C的代碼。

- (NSString *)encode:(NSString *)inId 
{ 
NSString *uniqueId = inId; 

// convert user id in to data 
NSData *userIdData = [uniqueId dataUsingEncoding:NSUTF16StringEncoding]; 
// convert encoded userId's data into base64EncodedString 
NSString *base64String = [Base64 encode:userIdData]; 
//NSString *base64String = [userIdData encodeBase64ForData]; 

NSString *encodedId = [[NSString alloc] initWithString:base64String]; 
// replace "/" character in base64String into "_" character 
encodedId = [encodedId stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; 
// replace "+" character in base64String into "-" character 
encodedId = [encodedId stringByReplacingOccurrencesOfString:@"+" withString:@"-"]; 
// get substring of range 22 
encodedId = [encodedId substringToIndex:22]; 
NSLog(@"Base 64 encoded = %@",encodedId); 
return encodedId; 
} 

我打電話從viewDidLoad中

NSString *encodedStr = [self encode:@"a8f9f344-d14e-4541-a8e7-0f5936e42254"];// string to encode 
NSLog(@"Encoded String %@",encodedStr); 

這個代碼不給我正確的結果這個功能我想 用於例如:對字符串a8f9f344-d14e-4541-a8e7-0f5936e42254 它應該給出結果爲RPP5qE7RQUWo5w9ZNuQiVA。

謝謝。

回答

2

你的問題是,guid.ToByteArray()[uniqueId dataUsingEncoding:NSUTF16StringEncoding];不會做同樣的事情。據我可以從文檔中知道,前者刪除連字符,並將其餘部分視爲16字節的十六進制ASCII表示形式。後者只是將每個字符轉換爲UTF16(實際上,它已經是UTF-16)並將其放入NSData

您需要在Objective-C中編寫一些代碼以獲取ASCII十六進制字符串並將其轉換爲字節。