C#.NET位转换器不';不适用于SQL Server存储变量二进制读取

C#.NET位转换器不';不适用于SQL Server存储变量二进制读取,c#,.net,sql,sql-server-2008,type-conversion,C#,.net,Sql,Sql Server 2008,Type Conversion,我们正在SQL Server 2008数据库中存储一个整数作为VARBINARY。使用实体框架,当读取这个VARBINARY值时,它会向C代码返回一个字节数组 对。我知道立即将整数存储为VARBINARY在数据库中并不一定有意义。这种存储方法有很好的理由 因此,如果使用SELECT语句检查表,10762007的整数值实际上是0xA43717。将代码读入字节数组后,我们在代码中得到的实际值是: byte[] b = new byte[]{0, 164, 55, 23}; 现在,外行可能会认为简单

我们正在SQL Server 2008数据库中存储一个整数作为
VARBINARY
。使用实体框架,当读取这个
VARBINARY
值时,它会向C代码返回一个字节数组

对。我知道立即将整数存储为
VARBINARY
在数据库中并不一定有意义。这种存储方法有很好的理由

因此,如果使用
SELECT
语句检查表,10762007的整数值实际上是0xA43717。将代码读入字节数组后,我们在代码中得到的实际值是:

byte[] b = new byte[]{0, 164, 55, 23};
现在,外行可能会认为简单的转换回整数是:

int myInt = BitConverter.ToInt32(b);
…无法产生预期的结果

我通过以下操作解决了这个问题:

string bitString = string.Empty;
string[] bitArray = new string[4];

for ( int i = 0; i < 4; i++)
{
   bitArray[i] = Convert.ToString((int)b[i],2).PadLeft(8,"0");
   bitString += bitArray[i];
}

int theRealInt = Convert.ToInt32(bitString,2);
string bitString=string.Empty;
字符串[]位数组=新字符串[4];
对于(int i=0;i<4;i++)
{
位数组[i]=Convert.ToString((int)b[i],2).PadLeft(8,“0”);
位字符串+=位数组[i];
}
int-TheAlint=Convert.ToInt32(位字符串,2);
这实质上是将十六进制值的整数表示形式转换为一个位字符串,适当地追加它们,然后将大的、巨大的位字符串转换回整数

这是可行的,但看起来我做的工作比我需要的要多。是否有更简单的方法来执行此操作?基本上,我们将一个整数存储为数据库中的
VARBINARY
,然后希望将其转换回C#code中的同一个整数。

试试看

var myInt = BitConverter.ToInt32(b.Reverse().ToArray(),0);


它是关于

Jon Skeet在处理问题的BitConverter(
MiscUtil.Conversion.EndianBitConverter
)的替代品,它可以在

中找到。虽然它工作得很好,但我从未热衷于滥用
NetworkToHostOrder
。谢谢。这太棒了。
var myInt = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(b,0));