Your skill will accomplish what the force of many cannot |
|
PerlMonks |
Re: USPS Intelligent Barcode - binary data manipulationsby BrowserUk (Patriarch) |
on Sep 10, 2010 at 11:30 UTC ( [id://859630]=note: print w/replies, xml ) | Need Help?? |
I take it back! Having looked in more detail at the specification this morning, I see why you're having problems working out how to do this. This is one of those really nasty pieces of mainframe/COBOL-esque encoding, that requires BCD math on a fixed length BCD field. (COBOL: PIC 9(13) COMP). Perl's pack & unpack don't have anything to handle this directly, and even on a 64-bit machine, integer math simply isn't capable of handling 13-byte numbers. One way might be to drop into Inline::C and inline assembler (or Inline::Asm ) and use the vestigal BCD opcodes. (Though MS 64-bit compilers don't support inline assembler.) There are also some weird x64 opcodes that treat an 80-bit floating point register as a 17 digit BCD value that might be pressed into service for this. Perhaps the easiest and most portable way would be to use Math::BigInt to do the math; as_hex() to get it out of BigInt format; and then pack 'H26' to creat the binary string. Or download the USPS libraries and link them from XS. I think that the BigInt method would be easiest. Let us know if you need help with that? Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
In Section
Seekers of Perl Wisdom
|
|