Converting long to bytes

Having trouble as CRC16 returns a long and I want it to go into an array of two bytes. How do you convert int or long numbers into bytes. Otherwise, does anyone know where to get a 16 bit CRC class that does this.
yungAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
gadioConnect With a Mentor Commented:
Thank you diakov.
0
 
diakovCommented:
Hi 'yung',

Try this out. It converts the 64-bit long into 8 bytes and puts it into an array. You can apply it also to 32-bit ints.


            byte[] barray = new byte[8];
            long L = 0x0A000B000C000D00L;
            long byte_mask = 255;

            for (int i = 7; i >= 0; i--)
            {
              barray[i] = (byte)((L & (byte_mask << (8 * i))) >> (8 * i));      
              System.out.println(barray[i]);
            }



0
 
yungAuthor Commented:
Sorry if this is a dumb question, but what does " 0x0A000B000C000D00L" mean, is this hex? If I'm using the code for an int what would I use?

Ta
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
diakovCommented:
Yes, I used hex just as an example. There you clearly see the bytes. But you can use plain numbers as well. Like
L = 12341235424312L;
In case of int:

byte[] barray = new byte[4];
int iii = 0x0A000D00L; //or something like 341234;
int byte_mask = 255;

for (int i = 3; i >= 0; i--)
{
  barray[i] = (byte)((iii & (byte_mask << (8 * i))) >> (8 * i));
  System.out.println(barray[i]);
}
0
 
gadioCommented:
yung, here is another way of doing that (I prefer it its a bit more elegant):



public static byte[] longToByteArray(long num) {
   ByteArrayOutputStream baos;
   try {
      DataOutputStream dos = new DataOutputStream(baos = new ByteArrayOutputStream());
      dos.writeLong(num);
      return baos.toByteArray();
   } catch( Exception e ) {}
   return null;
}
           
0
 
yungAuthor Commented:
Thanks...both do the trick. I'll finally finish this datacomms assignment. You'll need to post as answrs tho, or else I can't unload the points.

Thanks
0
 
diakovCommented:
The 'gadio's answer is more elegant and Java style indeed. However, I still prefer the bitwise operations for small values like 1 long.

Say who takes the points.
0
 
gadioCommented:
yung, wherever the point are going to, learn this pattern of conversion in java, you can use it to change any type to bytes and back this way, even when you don't have a bitwize operations to do that (like doubles and floats).
0
 
ramsayCommented:
Should I toss a coin?

Heads for Diakov, tails for gadio...
Ok.. here goes

woops.. where'd that coin bounce!!??
DOH!

:)
0
 
diakovCommented:
as far as I'm concerned points go to 'gadio'.
0
 
yungAuthor Commented:
Hey, both answers were fine and both worked... and gadio, I have studied up on my bitwize operations. Maybe I'll even do well in my exams. Thanks to you both.

I'm giving the points only to gadio because diakov didn't actually post as an answer so I don't know how to do it any other way.
Cheers

yung
0
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.

All Courses

From novice to tech pro — start learning today.