• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 195
  • Last Modified:

How to convert bytes to long...

I think it would be easer to explain what it is I am trying to do rather than just ask a question. I would like to write a program that compresses files and then saves them into a temp. file. This file would contain all the compressed data. I have started to do this as follows:

1)Load the file to be compressed into a byte array
2)compress the byte array with zlib
3)find the origanal and new size of the byte array*
4)get the file name of the compressed file
5)now I start saveing the data into one file
    first I save one byte telling how many bytes are in the compressed files name, next I save that file name. Then I save the origanal and the new size of the byte array as longs(4 bytes each) Then I save save the actual byte array. This is the easy part. (The part I have done) Now I need to read back the file...

First I get the entire file and put it into a byte array. I then use the first byte to tell me how many bytes to read for the file name. Then next 8 bytes(heres the problem) contain the origanal and new(compressed) sizes of the byte array. They are both longs I get these 8 bytes and I don't know how to convert them back into the long long format. To simplafy the problem. Use the put command to put a long number to a file then load that same file into a byte array. This byte array should only be 4 bytes long. I then need to convert those 4 bytes into the origanl long. Wow big... Hope some one can help! Thanks in advance!!!!
1 Solution

The lset function is great for converting datatypes in VB, lets you fill in from the left between two user defined types, in the example I used bytes 1 - 8  for the file sizes, understanding that byte zero was for filename length.

Type a
    'bytes a-d are long int #1
    a As Byte
    b As Byte
    c As Byte
    d As Byte
    'bytes a-d are long int #2
    e As Byte
    f As Byte
    g As Byte
    h As Byte
End Type

Type b
    'for long int #1
    a As Long
    'for long int #2
    b As Long
End Type

Global t1 As a
Global t2 As b


t1.a = yourbytearray(1)
t1.b = yourbytearray(2)
t1.c = yourbytearray(3)
t1.d = yourbytearray(4)
t1.e = yourbytearray(5)
t1.f = yourbytearray(6)
t1.g = yourbytearray(7)
t1.h = yourbytearray(8)
LSet t2 = t1
MsgBox Format$(t2.a) + " " + Format$(t2.b)

This is only one method, but quite robust and solves other data conversion problems aswell.

if you unlock the question i've got a function for you that will make it a piece of cake. (depending on how your building the 4 byte block, if you want I've got a function for that too)

testing38Author Commented:
idt: good job! I guess it's not the best way of doing this (as I hear) but It does work and that's what counts.  A+ work
Johnn: nice to hear you have a function. Too bad you did not post it... Then I could at least of considered who to give the points to. Now I only have one choice....
I couldn't post it until I had a chance to provide an answer/
John, I'll give you points for that funtion.  
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

7 new features that'll make your work life better

It’s our mission to create a product that solves the huge challenges you face at work every day. In case you missed it, here are 7 delightful things we've added recently to monday to make it even more awesome.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now