Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

BitConverter के साथ SQL सर्वर varbinary bigint.ToInt64 मान भिन्न हैं

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);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. इकाई फ्रेमवर्क में SQL सर्वर अनुक्रम का अगला मान कैसे प्राप्त करें?

  2. SQL सर्वर (T-SQL उदाहरण) में 'डेटाटाइमऑफ़सेट' को 'डेटाटाइम' में बदलें

  3. SQL सर्वर Concatenate GROUP BY

  4. टी-एसक्यूएल डायनेमिक एसक्यूएल और टेम्प टेबल्स

  5. 64 बिट पैकेज में 32 बिट एसएसआईएस पैकेज कैसे निष्पादित करें?