将Byte[]转换为Double

5
我有一个byte[8]数组,实际上是数据库中的RowVersion值。我只关心这个8字节数组的最后4个字节。我想要做到这一点:
 Version = BitConverter.ToDouble(t.Version,4)

“Version”是一个浮点数。但是,我收到了一个错误,提示:

目标数组不够长,无法复制集合中的所有项目。请检查数组索引和长度。

我的“版本”值为:

[0]0 [1]0 [2]0 [3]0 [4]0 [5]0 [6]12 [7]102

我做错了什么?


double 占用 8 个字节,也许你想使用 float - Display Name
1
MSDN - "ToDouble方法将从索引startIndex到startIndex + 7的字节转换为Double值",4 + 7大于您初始数组的大小。 - Preston Guillot
2个回答

6

double需要8个字节,因此你应该只从整个byte[]中获取一个:

BitConverter.ToDouble(input, 0);

返回值

3.7179659497173697E+183

更新

但是因为你说它是一个rowversion值,所以你应该将其转换为long而不是double

BitConverter.ToInt64(input, 0);

返回值

7353252291589177344

这是我最初尝试的方法,Marcin,但我注意到当我按此数字排序时,结果很奇怪。我认为“+183”可能是问题所在,这个数字太大了,无法排序? - Craig
1
这是“rowversion”,因此您应该使用Int64(又名long)而不是double - MarcinJuraszek

0

使用这段代码:

double[] array= bytearray.Select(i => (double)i).ToArray();

更新:

BitConverter.ToDouble(yournumber, 0);

3
我认为这不是原帖所寻找的。 - MarcinJuraszek
是的,我正在尝试将byte[]转换为数字,以便可以对其进行排序,而前4个字节永远不会被使用 - 或者不会,因为要到达该大小的记录数量有点大。所以,我只关心前(后?)4个字节。然后我想将byte [4]转换为数字。 - Craig
我认为一个8字节的数组对于int类型来说太大了,甚至对于double类型也是如此。因此,我首先尝试减小字节大小,然后再进行转换。 - Craig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接