0

SQL Server 2008 データベースに整数をVARBINARY. Entity Framework を使用して、このVARBINARY値を読み取ると、C# コードにバイト配列が返されます。

はい。VARBINARY整数を としてデータベースにすぐに保存することは必ずしも意味がないことはわかっています。この保存方法にはちゃんとした理由があります。

したがって、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);

これは基本的に、16 進数値の整数表現を取得し、それらをビット文字列に変換し、適切に追加してから、大きくて巨大なビット文字列を整数に変換します。

これは機能しますが、必要以上の作業を行っているようです。このアクションを実行する簡単な方法はありますか? 基本的に、整数を として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

Jon Skeet は、エンディアンの問題MiscUtil.Conversion.EndianBitConverterを処理する BitConverter ( )のドロップイン代替品を用意しており、 Miscellaneous Utility Libraryにあります。

于 2013-09-03T18:51:06.937 に答える