Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
I am having trouble understanding exactly what kind of data that you really have. This matters. Do you have real binary? Or are you using some textual string representation of binary data?

AnomalousMonk immediately converted your string into "real binary", which is not unreasonable as you can't post a binary file here, you'd have to uuencode it or whatever. It could be that you are working from a spec and don't have a real binary file to work from. Below shows to write one to disk for testing.

#we are packing nibbles (4 bits) at a time # H is big-endian order # h is little-endian order (swaps adjacent nibbles) my $raw = pack 'H*', '8447000c0000110a0350'; #decode back to input string... print unpack ('H*', $raw), "\n"; # prints: 8447000c0000110a0350 print unpack ('h*', $raw), "\n"; # prints: 487400c0000011a03005 #need to set binmode when writing raw binary data... open (BIN, '>', 'test.bin') || die "can't open test.bin"; binmode(BIN); print BIN $raw; close BIN;
Yes, there are a number of ways to write the code that gets the length:
# v1 is a little-endian 16 bit (short) so needs 2 bytes # if substr didn't limit to 2 bytes substr($raw,1) works also # unpack will use first 2 bytes. my ($len) = unpack 'v1',substr($raw,1,2);#substr deals in bytes not ni +bbles. print $len,"\n"; #prints 71 print unpack ('v', substr($raw,1)),"\n"; #prints 71 print unpack ('x v', $raw ),"\n"; #prints 71
so questions:
1. Do you really have real binary or are you just working from this "nibblelist" format in ASCII?
2. It would be helpful if you had a little chart explaining or the C record declaration or equivalent in whatever format you can:
record: unsigned char record_type 8 bits unsigned short length 16 bits little endian ... some data type and description of these sections...
After see they single byte of type and the 2 bytes (little endian) of length, then there are 3 different types of data sections that can follow depending upon the type, please explain that a bit more - not sure that I really get it.

I would suggest reading more about substr. I think you probably want to leave off REPLACEMENT parm. The $str = substr eXPR, OFFSET, LENGTH, REPLACEMENT

If you really want to read binary, read more about read as you will have to set binmode and also pay attention to the return value of read which is the actual number of bytes read. All of this is different if you just have an ASCII representation of binary instead of "real binary".


In reply to Re^3: How to sort record using pack function ? by Marshall
in thread How to sort record using pack function ? by bh_perl

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2024-04-26 08:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found