Кодирование не дает правильного результата в цели c - PullRequest
3 голосов
/ 26 сентября 2011

У меня есть код ac #, который кодирует строку.Я пытаюсь написать соответствующую процедуру в цели 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.

Спасибо.

1 Ответ

2 голосов
/ 26 сентября 2011

Ваша проблема в том, что guid.ToByteArray() и [uniqueId dataUsingEncoding:NSUTF16StringEncoding]; не делают одно и то же.Насколько я могу судить из документации, первый удаляет дефисы, а остальное - как шестнадцатеричное представление ASCII в 16 байтов.Последний просто превращает каждый символ в UTF16 (на самом деле, это уже UTF-16) и помещает его в NSData.

. Вам нужно написать некоторый код в Objective-C, чтобы взять строку шестнадцатеричного ASCII ипреобразовать его в байты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...