我有一个编码字符串的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。
感谢。
答案 0 :(得分:2)
您的问题是guid.ToByteArray()
和[uniqueId dataUsingEncoding:NSUTF16StringEncoding];
不做同样的事情。据我从文档中可以看出,前者删除了连字符,并将其余部分视为16字节的十六进制ASCII表示。后者只是将每个字符转换为UTF16(实际上,它已经是UTF-16)并将其放入NSData
。
您需要在Objective-C中编写一些代码来获取ASCII十六进制字符串并将其转换为字节。