• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 193
  • 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!!!!
0
testing38
Asked:
testing38
1 Solution
 
idtCommented:
Testing38,

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.

-iDT
0
 
JohnnCommented:
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)

John
0
 
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....
0
 
JohnnCommented:
I couldn't post it until I had a chance to provide an answer/
0
 
paulwelterCommented:
John, I'll give you points for that funtion.  
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

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