0

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

是的。VARBINARY我知道将整数作为 a 立即存储在数据库中并不一定有意义。这种存储方法有充分的理由。

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

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

这实质上是将我的十六进制值的整数表示形式,将它们转换为位字符串,适当地附加它们,然后将大而巨大的位字符串转换回整数。

这行得通,但似乎我做的工作比我需要的要多。有没有更简单的方法来执行此操作?基本上,我们将一个整数作为 a 存储VARBINARY在数据库中,然后希望将其转换回 C# 代码中的相同整数。

4

2 回答 2

2

试试看嘛

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

或者

var myInt = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(b,0));

这是关于字节序的

于 2013-09-03T18:33:11.813 回答
0

MiscUtil.Conversion.EndianBitConverterJon Skeet 有一个用于处理字节序问题的 BitConverter ( ) 的替代品,它可以在Miscellaneous Utility Library中找到

于 2013-09-03T18:51:06.937 回答