varbinary
. से कास्ट किया जा रहा है करने के लिए bigint
(और पीछे) नेटवर्क बाइट ऑर्डर (बिग-एंडियन) का उपयोग करता है।BitConverter
उस मशीन के एंडियन-नेस का उपयोग करता है जिस पर इसे चलाया जाता है (x86 और x64 के लिए छोटा-एंडियन)।
इसलिए BitConverter.GetBytes
-8588797048854775808 (0x88CE7696E7167800) पर चलाएं {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77}, और cast
है {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77} पर 0x0088E91869893177 =38536887891734903 है।
स्पष्ट बात यह है कि 64-बिट पूर्णांकों को पहले स्थान पर 64-बिट पूर्णांकों के रूप में संग्रहीत करना है।
यदि आपको वास्तव में यह रूपांतरण करने की आवश्यकता है तो:
var savedValue = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(longValue))
बाइट्स के चारों ओर स्वैप करेगा, जबकि पोर्टेबल होने के कारण यह बड़े-एंडियन मशीन पर चलने पर बाइट्स को स्वैप नहीं करेगा।
वैकल्पिक रूप से, यदि आप किसी कारण से System.Net नामस्थान का उपयोग नहीं करना चाहते हैं, या यदि आप तीन IPAddress.HostToNetworkOrder
के अलावा अन्य प्रकारों के लिए एक्स्टेंसिबल होना चाहते हैं हैंडल, उपयोग:
var savedValue = BitConverter.GetBytes(longValue);
if(BitConverter.IsLittleEndian)
Array.Reverse(savedValue);