4

私は難しい問題に直面しています。C# で sqlite データベースからデータを読み込みたい。データベースのデータ フィールドのタイプは BLOB です。このフィールドには、Java によって記述された double 値 (text や int などの他の型の値も含まれます) が含まれます。C# で double 値を読み取る必要があります。

質問で大変なミスをしてしまい申し訳ありません。データベースから読み取られるブロブストリームによって初期化された ByteBuffer を作成することにより、Java で double 値を読み取ります。また、C# には対応する ByteBuffer データ構造体がないため、以下のコードを使用して 8 バイト ストリームから double 値を取得します。

public double getDouble()
{
    if(CURRENT_POSITION + 7 >= CURRENT_LENGTH)
    {
        return 0;
    }
    double ret = (double)(TEMP_BYTE_ARRAY[CURRENT_POSITION + 7] << 56 |
                          TEMP_BYTE_ARRAY[CURRENT_POSITION + 6] << 48 |
                          TEMP_BYTE_ARRAY[CURRENT_POSITION + 5] << 40 |
    .....
    );
    return ret;
}

しかし、同じコードを使用して C# で blob フィールドから正しい double 値を取得できません。Java で定義されたバイナリ スタイルの double 値を C# の double 値に変換する方法について、誰かアドバイスをもらえますか?

ところで、blob フィールドは他の多くの型の値を圧縮しているため、データベースの構造を変更することはできません。よろしくお願いします。

4

1 に答える 1

1

BitConverterを使用します。

double ret = BitConverter.ToDouble(TEMP_BYTE_ARRAY, CURRENT_POSITION); 

投稿したコードは、整数を作成し、整数を double に変換するだけです。これは、必要なものではありません。

または、MemoryStream に対して BinaryReader を作成することにより、ByteBuffer と同じ機能を取得できます。例えば:

MemoryStream memStream = new MemoryStream(TEMP_BYTE_ARRAY);
BinaryReader reader = new BinaryReader(memStream);

//read data
double a = reader.ReadDouble();
int b = reader.ReadInt();
string c = reader.ReadString();
于 2012-10-14T09:39:24.887 に答える