Solved

Converting from Little Endian to Big Endian

Posted on 2001-06-05
3
1,367 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 75 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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
read PayflowPro reports using the report metadata using perl 11 44
Uploading Binary Data using Perl 5 99
collecting information 2 206
Merging two files with Perl 5 33
On Microsoft Windows, if  when you click or type the name of a .pl file, you get an error "is not recognized as an internal or external command, operable program or batch file", then this means you do not have the .pl file extension associated with …
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…

730 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