यदि आप हेक्स अंकों के शामिल मूल्यों (जोड़ों में) को देखते हैं, तो आप देख सकते हैं कि अंतिम 7 बाइट दोनों ही मामलों में समान हैं, लेकिन पहले 9 को थोड़ा बदल दिया गया है।
आपके उदाहरण से जा रहे हैं, लेकिन प्रत्येक जोड़ी को .NET में 00, 11, 22 आदि के रूप में फिर से लिखना और Oracle के प्रासंगिक बाइट को स्विच करना भी हमें मिलता है:
-
.नेट:
00112233445566778899AABBCCDDEEFF
-
ओरेकल:
33221100554477668899AABBCCFFEEFF
इसलिए प्रासंगिक बाइट्स के चारों ओर स्विच करने के लिए कोड लिखना काफी आसान होना चाहिए। (मुझे पूरा यकीन है कि मैंने पिछली नौकरी में ऐसा करने के लिए कुछ कोड लिखा था, वास्तव में।)
बाइट्स के चारों ओर स्विच करने के लिए, आपको बस Guid.ToByteArray()
पर कॉल करना होगा। और new Guid(byte[])
किसी Guid
पर वापस जाने के लिए ।
संपादित करें:जैसा कि होता है, ऊपर स्विच-राउंड बिल्कुल . है क्या है Guid
कंस्ट्रक्टर तब करता है जब आप इसे बाइट ऐरे पास करते हैं:
using System;
using System.Linq;
class Test
{
static void Main()
{
byte[] bytes = Enumerable.Range(0, 16)
.Select(x => x * 16 + x)
.Select(x => (byte) x)
.ToArray();
Console.WriteLine(BitConverter.ToString(bytes).Replace("-", ""));
Console.WriteLine(new Guid(bytes).ToString().Replace("-", ""));
}
}
प्रिंट:
00112233445566778899AABBCCDDEEFF
33221100554477668899aabbccddeeff
इससे स्विचिंग करना काफी आसान हो सकता है ... आप शुरू करने के लिए मूल्यों को कैसे पकड़ रहे थे? क्या यह सिर्फ "Oracle में वे कैसे प्रदर्शित होते हैं"?
संपादित करें:ठीक है, यहां कुछ रूपांतरण कार्य हैं - यदि आपके पास डेटा टेक्स्ट के रूप में है, तो वे हर तरह से परिवर्तित हो जाएंगे...
using System;
using System.Linq;
class Test
{
static void Main()
{
string oracle = "329DD817216CD6429B989F5201288DBF";
string dotNet = "17D89D326C2142D69B989F5201288DBF";
Console.WriteLine(oracle == DotNetToOracle(dotNet));
Console.WriteLine(dotNet == OracleToDotNet(oracle));
}
static string OracleToDotNet(string text)
{
byte[] bytes = ParseHex(text);
Guid guid = new Guid(bytes);
return guid.ToString("N").ToUpperInvariant();
}
static string DotNetToOracle(string text)
{
Guid guid = new Guid(text);
return BitConverter.ToString(guid.ToByteArray()).Replace("-", "");
}
static byte[] ParseHex(string text)
{
// Not the most efficient code in the world, but
// it works...
byte[] ret = new byte[text.Length / 2];
for (int i = 0; i < ret.Length; i++)
{
ret[i] = Convert.ToByte(text.Substring(i * 2, 2), 16);
}
return ret;
}
}