FYI "packed format" is not part of the EBCDIC character set, it is a way of storing numerical data on the host. Basically the host has two forms of storing numerical data: "zoned (decimal)" and "packed (decimal)".
Here is a thorough description.
Basically "zoned" stores a hexadecimal value in the lower nibble (the lower 4 bits of a byte) and an "F" in the higher nibble. In the last digit the higher nibble is used for storing the sign instead. i.e "123" (or "+123") would look like
F1F1C3, the "C" being the code for a positive number. This format can be translated easily into ASCII (simply replace the high-nibbles with "3" instead of "F").
The packed format stores a digit in each of the nibbles so that there is no direct translation of one byte EBCDIC to one byte ASCII. The sign is stored in in the last nibble but coded in various ways (depending on "format" versus "informat". Either "C" is positive and "D" is negative (format) or "A", "C", "E" and "F" is positive and "B" and "D" is negative (informat). If you end with an odd number of nibbles the leftmost byte is padded with a 0 (zero) in the high-nibble. You actually need to calculate the value from the bytewise representation to translate it to ASCII.
There are professional software packages for the file transfer between (z/OS) mainframes and the UNIX world. Connect: Direct, IND$FILE and XCOM Data Transfer, just to name a few. The problem with transferring mainframe data is that there are a lot more data formats on the mainframe than there are on UNIX. You have i.e. fixed-length-record data, you have packed and zoned decimals and lots more. It isn't (only) that easy 1:1 translation you have from one charset to another.
I hope this helps.
bakunin