1

I have this situation. I have a real stored in a varbinary field in a sql 2005 database. As I can't convert a varbinary to a real in sql 2005, I'm trying to do that in vb.net.

That field gets stored as a byte() array in a DataTable.

Now I would like to read that byte() into a double, or decimal variable. But I don't have much of a clue on how to do that...

3 Answers 3

2

It really depends on how it's stored, but BitConverter.ToDouble may be your friend. That's assuming it's in IEE754 format. Where are you getting the data from in the first place?

Sign up to request clarification or add additional context in comments.

Comments

1

I don't know VB.net well, but know the .NET libraries.

Wrap the byte[] in a MemoryStream and wrap that in a BinaryReader. Then use the BinaryReader.ReadDouble() method. See here and here for MSDN pages.

Edit in response to this

You are looking for a piece of code looking like 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()

Comments

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 Comment

Sorry, my prev. code was dead wrong. here, below, is the correct one

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.