C# Java和C中双值的底层实现#

C# Java和C中双值的底层实现#,c#,java,database,double,C#,Java,Database,Double,我面临一个棘手的问题。我希望通过C#从sqlite数据库读取数据。数据库中的数据字段具有blob类型。该字段包含由Java编写的双值(也有其他类型的值,如text和int)。我需要用C#读出双值 很抱歉,我在这个问题上犯了一个严重的错误。我通过创建由从数据库读取的blob流初始化的ByteBuffer来读取Java中的双值。在C#中没有对应的ByteBuffer数据结构,因此我使用下面的代码从8字节流中获取双精度值 public double getDouble() { if(CURRE

我面临一个棘手的问题。我希望通过C#从sqlite数据库读取数据。数据库中的数据字段具有blob类型。该字段包含由Java编写的双值(也有其他类型的值,如text和int)。我需要用C#读出双值

很抱歉,我在这个问题上犯了一个严重的错误。我通过创建由从数据库读取的blob流初始化的ByteBuffer来读取Java中的双值。在C#中没有对应的ByteBuffer数据结构,因此我使用下面的代码从8字节流中获取双精度值

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;
}
public double getDouble()
{
如果(当前位置+7>=当前长度)
{
返回0;
}
double ret=(double)(临时字节数组[当前位置+7]使用:

您发布的代码只是创建了一个整数,并将该整数转换为一个double,这不是您想要的

另一方面,您可以通过在上创建来获得与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();

你真的确定这就是你想要的Java端的代码吗?那总是会给出一个整数…@JonSkeet Hi Jon,谢谢你的评论,我已经编辑了这个问题,你能帮我吗?这仍然不会产生任何非整数值…如果你期待它,你真的需要看看你在做什么…也许你应该发布一个来自数据库的示例值以及我们期望从中读取的值?
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();