C# iOS和.NET之间的Base64编码差异

C# iOS和.NET之间的Base64编码差异,c#,ios,objective-c,encoding,base64,C#,Ios,Objective C,Encoding,Base64,我正在开发一个50%的iOS和50%的Microsoft.NET C#的系统。系统中使用的主要ID是guid/nsuid,它们不时转换为Base64字符串。我在.NET和iOS执行base64转换的方式上存在差异 以下是将NSUID(字符串格式)转换为Base64字符串的objective-c代码: +(NSString*)getBase64IdFromGuidStringWithString:(NSString*)stringInGuidFormat { NSLog(@"stringI

我正在开发一个50%的iOS和50%的Microsoft.NET C#的系统。系统中使用的主要ID是guid/nsuid,它们不时转换为Base64字符串。我在.NET和iOS执行base64转换的方式上存在差异

以下是将NSUID(字符串格式)转换为Base64字符串的objective-c代码:

+(NSString*)getBase64IdFromGuidStringWithString:(NSString*)stringInGuidFormat
{
    NSLog(@"stringInGuidFormat is %@",stringInGuidFormat);

    NSUUID* nsuuid = [[NSUUID alloc] initWithUUIDString:stringInGuidFormat];
    uuid_t uuid;
    [nsuuid getUUIDBytes:uuid];
    NSData* data = [NSData dataWithBytes:uuid length:16];
    NSString* base64 = [data base64EncodedString];

    NSLog(@"base64 is %@",base64);
    return base64;

}
其中[data base64EncodedString]由

在.NET C#中有一个类似的方法来做同样的事情:

private string convertGuidStringToBase64(string elementAsString)
{
    Guid isAsGuid = new Guid(elementAsString);
    string base64 = Convert.ToBase64String(isAsGuid.ToByteArray());
    return base64;
}
给定CBB2B719-D129-4051-B694-4204A6F6BE93的起始字符串值,我得到以下结果: iOS认为base64值为y7K3GdEpQFG2lEIEpva+kw== C#认为base64值为GbeyyynRUUC2lEIEpva+kw==

显然我有点不对劲!谁能指出我的错误,并为我指出正确的方向来解决它


非常感谢。

这看起来很像字节顺序问题。 Base64解码后,这两个值为:

cb b2 b7 19 d1 29 40 51 b6 94 42 04 a6 f6 be 93

注意到前4个字节被颠倒了吗

如果想要相同的值,必须确保使用相同的字节顺序。为了便于移植,我建议将其转换为网络字节顺序

希望这有帮助

干杯
Patrik

Base64转换不可能是问题所在。它是标准化的,应该在所有平台上工作。它将一系列字节从/转换为字符串,因此字节的结尾在这里不是问题

这就剩下了nsuid和Guid。这两个系统的存储方式似乎有所不同。它们在内存中以不同的顺序存储字节。持久性。因此,它们的Base64编码值也将不同


我建议您阅读UUID和Guid,特别是它们如何在内存中存储数据。

数据(在ObjC部分)和isAsGuid.ToByteArray()之间有什么区别吗?非常感谢Patrick,您能发布解决方案吗?
19 b7 b2 cb 29 d1 51 40 b6 94 42 04 a6 f6 be 93