[英]Base64 encoding difference between iOS and .NET
我正在使用50%iOS和50%Microsoft.NET C#的系統。 系統中使用的主要ID是Guids / NSUUID,這些ID有時會轉換為Base64字符串。 我在.NET和iOS如何執行base64轉換方面存在差異。
這是我的Objective-C代碼,用於將NSUUID(以字符串格式)轉換為Base64字符串:
+(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]由Matt Gallagher提供
這是.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
和
19 b7 b2 cb 29 d1 51 40 b6 94 42 04 a6 f6 be 93
注意頭4個字節被反轉了嗎?
如果要使用相同的值,則必須確保使用相同的字節順序。 我建議轉換為網絡字節順序以實現可移植性。
希望這可以幫助
干杯帕特里克
Base64轉換不是問題。 它是標准化的,並且可以在所有平台上運行。 它將一系列字節從字符串轉換為字符串,因此字節字節順序在這里不會成為問題。
剩下我們NSUUID和Guid。 看來它們在兩個系統上的存儲方式不同。 它們以不同的順序(也稱為字節)將字節存儲在內存中。 字節順序。 因此,它們的Base64編碼值也將不同。
我建議您閱讀有關UUID和Guid的文章,尤其是它們如何將數據存儲在內存中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.