2008-10-23 5 views
1

У меня такая ситуация. У меня есть реальное хранилище в поле varbinary в базе данных sql 2005. Поскольку я не могу преобразовать varbinary в real в sql 2005, я пытаюсь сделать это в vb.net.Преобразование массива byte() в double в VB.Net

Это поле хранится как массив byte() в DataTable.

Теперь я хотел бы прочитать, что byte() в двойной или десятичной переменной. Но я не очень понимаю, как это сделать ...

ответ

2

Это действительно зависит от того, как он хранится, но BitConverter.ToDouble может быть вашим другом. Это предполагается в формате IEE754. Откуда вы получаете данные изначально?

1

Я не очень хорошо знаю VB.net, но знаю библиотеки .NET.

Оберните байт [] в MemoryStream и оберните его в BinaryReader. Затем используйте метод BinaryReader.ReadDouble(). См. here и here для страниц MSDN.

Редактировать в ответ на this

Вы ищете кусок кода вида:

'declare a test array 
Dim testArray As Byte() = {0, 0, 0, 0} 
'wrap it into a memory stream 
Dim memStream As MemoryStream = new MemoryStream(testArray) 
'wrap the stream in a binary reader 
Dim bReader As BinaryReader = new BinaryReader(memStream) 
'read a 32bit integer from the stream using the reader 
Dim count As Integer = bReader.ReadInt32() 
0
Public Function GetDateFromBytes(ByRef value() As Byte, _ 
            ByRef startindex As Int32) As Date 
    'create a aray of Ints 
    Dim IntValues() As Int32 = {BitConverter.ToInt32(value, startindex), _ 
            BitConverter.ToInt32(value, (startindex + 7)), _ 
            BitConverter.ToInt32(value, startindex + 15), _ 
            BitConverter.ToInt32(value, startindex + 31)} 

    Return Date.FromBinary(New Decimal(IntValues)) 

End Function 
+1

К сожалению, мой пред. код был неправ. здесь, ниже, является правильным – 2009-03-18 11:44:55