CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    Apr 2001
    Posts
    95

    Integer Values to Binary File

    Hello....

    I have a array of a user defined type that I am adding to a file like this:



    Open FileName for binary as #nFileNum

    for nCount = LBound(g_MyArray) to UBound(g_MyArray) step 1
    Put nFileNum, , g_MyArray(nCount)
    next nCount

    ' close the file
    Close nFileNum





    Now I want to add some integers to the file that is not in the array. What is the best way to do that?

    Much thanks in advance for your help.


  2. #2
    Join Date
    May 2000
    Location
    New York, NY, USA
    Posts
    2,878

    Re: Integer Values to Binary File

    I think you can convert integer to binary and them to the file. Here is the code how to convert decimal to binary

    Private Sub Form_Load()
    txtDecimalValue.Text = "123456789"
    End Sub

    Private Sub txtDecimalValue_KeyPress(KeyAscii As Integer)
    'Cancel input if the key pressed is not a number
    If IsNumeric(Chr(KeyAscii)) = False Then
    KeyAscii = 0
    End If
    End Sub
    Function Bin(Number) ' both Variants
    '===========================================
    Dim BitStream() As Byte
    Dim Bits As Byte
    Dim BitPointer As Byte
    Dim HexString As String
    Dim lenHS As Integer
    Dim HalfByte As Byte ' smallest VB word
    Dim i As Integer
    Dim j As Integer

    Const DABug As Boolean = False
    On Error GoTo eror

    Select Case VarType(Number)
    Case vbNull
    'pass a null, return a null
    Bin = Number
    Exit Function
    Case vbByte
    ' 0 to 255 unsigned
    Bits = 8
    Case vbInteger, vbBoolean
    ' -32,768 to 32,767
    Bits = 16
    Case vbLong
    ' -2,147,483,648 to 2,147,483,647
    Bits = 32
    Case vbSingle, vbDouble
    Bits = 32
    ' HEX() will convert these
    ' to Longs (if possible!)
    Case vbString
    '-a Number of unspecified Type-
    ''Note: This expects a String to be a Number
    '' To get the bits for a String, try this code:
    ''Dim BS() As Byte
    ''BS = MyString '-or- BS = StrConv(MyString, vbFromUnicode)
    ''For i = LBound(BS) To UBound(BS)
    '' Print Bin(BS(i)),
    ''Next i
    Case Else
    Err.Raise 2001, , "Not sure HOW to handle a (" & TypeName(Number) & ") DATA TYPE?"
    End Select

    '' if HEX() can't handle it,
    '' then neither can this code!
    HexString = Hex(Number)
    lenHS = Len(HexString)

    If Bits = 0 Then Bits = lenHS * 4 'bits
    ReDim BitStream(1 To Bits)
    BitPointer = Bits

    For i = lenHS To 1 Step -1
    HalfByte = Val("&H" & Mid(HexString, i, 1))
    For j = 1 To 4 ' bits
    If HalfByte Then
    BitStream(BitPointer) = HalfByte Mod 2
    HalfByte = Fix(HalfByte / 2)
    End If
    BitPointer = BitPointer - 1
    Next j
    Next i

    'now add 48 to all bits(bytes) for "0" or "1"
    For i = 1 To Bits
    BitStream(i) = BitStream(i) + 48
    Next i

    Bin = StrConv(BitStream, vbUnicode)
    ' format it
    Bin = Trim(Format(Bin, "&&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&&"))
    '(format it here? or outside this proc?)
    Exit Function

    eror:
    If DABug Then Debug.Print Err.Number & "-" & Err.Description
    Err.Clear
    Bin = "0"
    End Function

    Private Sub txtDecimalValue_Change()
    lblBinaryValue.Caption = Bin(txtDecimalValue.Text)
    End Sub




    Iouri Boutchkine
    [email protected]
    Iouri Boutchkine
    [email protected]

  3. #3
    Join Date
    Apr 2001
    Posts
    95

    Re: Integer Values to Binary File

    Thanks for your reply.... However I must have been unclear in my question. When adding the Array items (hereafter called records) using Statement Put to the file it adds them according the last record position. You can then Get the records in a similar fashion:

    [vbcode]
    nCount = 1

    Open FileName For Binary As #nFileNum

    Do
    ReDim Preserve g_MyArray(nCount)

    Get nFileNum, , g_MyArray(nCount)

    ' tells us if we are on the last record in file
    If Loc(nFileNum) > LOF(nFileNum) Then
    ' If so Extract last record
    ReDim Preserve g_OpenTree(LBound(g_OpenTree) To (nCount - 1))
    ' Finished opening file
    Exit Do
    End If

    nCount = nCount + 1
    Loop
    [/vbcode}


    What I would like to do is Put and Get variables BEFORE we Put and Get the Array records. How is this done? Hope this clarifies my query a little.... if not reply and say so.

    Much thanks again for your help.


  4. #4
    Join Date
    Apr 2001
    Posts
    95

    Re: Integer Values to Binary File

    Oooppss... the correct code for the previous post is this:



    nCount = 1

    Open FileName for binary as #nFileNum

    Do
    ReDim Preserve g_MyArray(nCount)

    get nFileNum, , g_MyArray(nCount)

    ' tells us if we are on the last record in file
    If Loc(nFileNum) > LOF(nFileNum) then
    ' If so Extract last record
    ReDim Preserve g_MyArray(LBound(g_MyArray) to (nCount - 1))
    ' Finished opening file
    Exit Do
    End If

    nCount = nCount + 1
    Loop







Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured