Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / October 2005

Tip: Looking for answers? Try searching our database.

Help with byte[8] to long

Thread view: 
jeffdeanda@gmail.com - 26 Oct 2005 02:03 GMT
I'm having trouble converting a byte array to long. The code below
results in a long value of 4096, which is way off. If I remove on or
the other values and replace it with 0 it still results in the same
outcome. I'm thinking there's a problem with the shifting in the 2nd to
last line, but am unable to figure it out. Any thoughts?

Here's the code:

short[] ss = new short[4];
ss[0] = 0;
ss[1] = 4096;
ss[2] = 0;
ss[3] = 4096;

byte[] b = new byte[8];
b[0] = (byte)(ss[0] >> 8 & 0x0FF);
b[1] = (byte)(ss[0] >> 0 & 0x0FF);
b[2] = (byte)(ss[1] >> 8 & 0x0FF);
b[3] = (byte)(ss[1] >> 0 & 0x0FF);
b[4] = (byte)(ss[2] >> 8 & 0x0FF);
b[5] = (byte)(ss[2] >> 0 & 0x0FF);
b[6] = (byte)(ss[3] >> 8 & 0x0FF);
b[7] = (byte)(ss[3] >> 0 & 0x0FF);

long l = (long)(
        (b[0] << 56) |
        (b[1] << 48) |
        (b[2] << 40) |
        (b[3] << 32) |
        (b[4] << 24) |
        (b[5] << 16) |
        (b[6] << 8) |
        (b[7] << 0));

System.out.println(Long.toString(l) + "\n");
Roedy Green - 26 Oct 2005 02:11 GMT
>I'm having trouble converting a byte array to long. The code below
>results in a long value of 4096, which is way off. If I remove on or
>the other values and replace it with 0 it still results in the same
>outcome. I'm thinking there's a problem with the shifting in the 2nd to
>last line, but am unable to figure it out. Any thoughts?

Have a look at http://mindprod.com/jgloss/endian.html

IT contains codes for taking longs apart into bytes and putting them
together again in the opposite byte sex order.

You can use half the code.
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Nigel Wade - 26 Oct 2005 10:44 GMT
> I'm having trouble converting a byte array to long. The code below
> results in a long value of 4096, which is way off. If I remove on or
[quoted text clipped - 31 lines]
>
> System.out.println(Long.toString(l) + "\n");

ByteBuffer bb = ByteBuffer.wrap(b);
((ShortBuffer)bb.asShortBuffer()).put(ss);
long l = bb.getLong();

Signature

Nigel Wade, System Administrator, Space Plasma Physics Group,
           University of Leicester, Leicester, LE1 7RH, UK
E-mail :    nmw@ion.le.ac.uk
Phone :     +44 (0)116 2523548, Fax : +44 (0)116 2523555

charles_n_may@yahoo.com - 26 Oct 2005 14:35 GMT
The problem is that the << operator returns type int unless the operand
to its left is a long. Your operands to the left of << are bytes, so
the result type of each << operation is int, and you're dropping bits
when you shift left past the 32-bit width of an int. You want your
left-hand operands to be longs so you have a 64-bit area to work in.

Try casting your left hand operands to longs, like this:

long l =
((long)b[0] << 56) |
((long)b[1] << 48) |
((long)b[2] << 40) |
((long)b[3] << 32) |
((long)b[4] << 24) |
((long)b[5] << 16) |
((long)b[6] << 8) |
((long)b[7] << 0);
jeffdeanda@gmail.com - 26 Oct 2005 22:55 GMT
Thanks for the help. Got it to work.


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.