?
Solved

Converting from Little Endian to Big Endian

Posted on 2001-06-05
3
Medium Priority
?
1,369 Views
Last Modified: 2012-06-27
Hi - I am opening a socket up from a Mandrake machine (Little Endian) to an HP9000 (Big Endian) and receiving a record out of a KISAM file into a variable.

I then write this variable to disk. KISAM files have a data dictionary which states information about where in the record a field is located and the length it is in bytes.

The data dictionary states that the field I am looking for is binary, starts at byte 2 and is 3 bytes long. The field when unpacked should be a long integer 176385.

If I write the variable containing the record I received to disk and open it in binary editor I get this (just showing the first four bytes):
00000000 00000010 10110001 00000001

I wrote a script in perl to pack 176385 and wrote the resulting variable to disk
$num = pack("L", 176385);
Editing this file in binary editor showed:
00000001 10110001 00000010

I presume that I need to convert my variable from big endian to little endian, do a substr($record,2,3)  to get the 3 bytes from start byte 2 (as the data dictionary states) and then unpack the resulting string.

How do I convert my variable from big endian to little endian in perl?

PS Im not being tight - I only have 75 points to offer!
0
Comment
Question by:kccsf
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 84

Accepted Solution

by:
ozo earned 225 total points
ID: 6158320
$little = unpack"V",pack"N",$big;
0
 
LVL 5

Expert Comment

by:Sapa
ID: 6158924
kccsf:

 or even better, send all binary data in machine independent 'network order'.

$num=pack('N',176385);  # on sender side

and

$u32=unpack('N',$num); # on receiver side

- Sapa
0
 

Author Comment

by:kccsf
ID: 6208730
Apologies for delay - just got back rfom holiday and relooked at this.

The answer was to do this but I had to append a blank byte on the front of the substring if it was made up of an odd number of bytes.

Instead I am now looping through the number one byte at a time and bitshifting it depending on which byte it is ie:

1st byte
2nd byte <<8
3rd byte <<16

and totalling them up.

Thanks for your help.
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Ready to improve network connectivity? Watch this webinar to learn how SD-WANs and a one-click instant connect tool can boost provisions, deployment, and management of your cloud connection.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In the distant past (last year) I hacked together a little toy that would allow a couple of Manager types to query, preview, and extract data from a number of MongoDB instances, to their tool of choice: Excel (http://dilbert.com/strips/comic/2007-08…
Checking the Alert Log in AWS RDS Oracle can be a pain through their user interface.  I made a script to download the Alert Log, look for errors, and email me the trace files.  In this article I'll describe what I did and share my script.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Six Sigma Control Plans

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question