Transmisi dari varbinary
ke bigint
(dan kembali) menggunakan urutan byte jaringan (big-endian).BitConverter
menggunakan endian-ness dari mesin yang menjalankannya (little-endian untuk x86 dan x64).
Karenanya BitConverter.GetBytes
dijalankan pada -8588797048854775808 (0x88CE7696E7167800) adalah {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77}, dan cast
pada {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77} adalah 0x0088E91869893177 =38536887891734903.
Hal yang jelas untuk dilakukan adalah menyimpan bilangan bulat 64-bit sebagai bilangan bulat 64-bit.
Jika Anda benar-benar perlu melakukan konversi ini, maka:
var savedValue = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(longValue))
Akan bertukar sekitar byte, sementara juga portabel karena tidak akan menukar byte jika dijalankan pada mesin big-endian.
Atau, jika Anda tidak ingin menggunakan namespace System.Net karena alasan tertentu, atau jika Anda ingin diperluas ke jenis selain dari tiga IPAddress.HostToNetworkOrder
pegangan, gunakan:
var savedValue = BitConverter.GetBytes(longValue);
if(BitConverter.IsLittleEndian)
Array.Reverse(savedValue);