⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 binascii.java

📁 无线通信的主要编程软件,是无线通信工作人员的必备工具,关天相关教程我会在后续传上.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * Copyright 1998 Finn Bock. * * This program contains material copyrighted by: * Copyright (c) 1991, 1992, 1993, 1994 by Stichting Mathematisch Centrum, * Amsterdam, The Netherlands. */package org.python.modules;import java.util.*;import org.python.core.*;/** * The <tt>binascii.java</tt> module contains a number of methods to convert * between binary and various ASCII-encoded binary * representations. Normally, you will not use these modules directly but * use wrapper modules like <tt>uu</tt><a name="l2h-"></a> or * <tt>hexbin</tt><a name="l2h-"></a> instead, this module solely * exists because bit-manipuation of large amounts of data is slow in * Python. * * <P> * The <tt>binascii.java</tt> module defines the following functions: * <P> * <dl><dt><b><a name="l2h-19960"><tt>a2b_uu</tt></a></b> (<var>string</var>) * <dd> * Convert a single line of uuencoded data back to binary and return the * binary data. Lines normally contain 45 (binary) bytes, except for the * last line. Line data may be followed by whitespace. * </dl> * * <P> * <dl><dt><b><tt>b2a_uu</tt></b> (<var>data</var>) * <dd> * Convert binary data to a line of ASCII characters, the return value * is the converted line, including a newline char. The length of * <i>data</i> should be at most 45. * </dl> * * <P> * <dl><dt><b><tt>a2b_base64</tt></b> (<var>string</var>) * <dd> * Convert a block of base64 data back to binary and return the * binary data. More than one line may be passed at a time. * </dl> * * <P> * <dl><dt><b><tt>b2a_base64</tt></b> (<var>data</var>) * <dd> * Convert binary data to a line of ASCII characters in base64 coding. * The return value is the converted line, including a newline char. * The length of <i>data</i> should be at most 57 to adhere to the base64 * standard. * </dl> * * <P> * <dl><dt><b><tt>a2b_hqx</tt></b> (<var>string</var>) * <dd> * Convert binhex4 formatted ASCII data to binary, without doing * RLE-decompression. The string should contain a complete number of * binary bytes, or (in case of the last portion of the binhex4 data) * have the remaining bits zero. * </dl> * * <P> * <dl><dt><b><tt>rledecode_hqx</tt></b> (<var>data</var>) * <dd> * Perform RLE-decompression on the data, as per the binhex4 * standard. The algorithm uses <tt>0x90</tt> after a byte as a repeat * indicator, followed by a count. A count of <tt>0</tt> specifies a byte * value of <tt>0x90</tt>. The routine returns the decompressed data, * unless data input data ends in an orphaned repeat indicator, in which * case the <tt>Incomplete</tt> exception is raised. * </dl> * * <P> * <dl><dt><b><tt>rlecode_hqx</tt></b> (<var>data</var>) * <dd> * Perform binhex4 style RLE-compression on <i>data</i> and return the * result. * </dl> * * <P> * <dl><dt><b><tt>b2a_hqx</tt></b> (<var>data</var>) * <dd> * Perform hexbin4 binary-to-ASCII translation and return the * resulting string. The argument should already be RLE-coded, and have a * length divisible by 3 (except possibly the last fragment). * </dl> * * <P> * <dl><dt><b><tt>crc_hqx</tt></b> (<var>data, crc</var>) * <dd> * Compute the binhex4 crc value of <i>data</i>, starting with an initial * <i>crc</i> and returning the result. * </dl> * * <dl><dt><b><tt>Error</tt></b> * <dd> * Exception raised on errors. These are usually programming errors. * </dl> * * <P> * <dl><dt><b><tt>Incomplete</tt></b> * <dd> * Exception raised on incomplete data. These are usually not programming * errors, but may be handled by reading a little more data and trying * again. * </dl> * * The module is a line-by-line conversion of the original binasciimodule.c * written by Jack Jansen, except that all mistakes and errors are my own. * <p> * @author Finn Bock, bckfnn@pipmail.dknet.dk * @version binascii.java,v 1.6 1999/02/20 11:37:07 fb Exp */public class binascii {    public static String __doc__ = "Conversion between binary data and ASCII";    public static final PyString Error = new PyString("binascii.Error");    public static final PyString Incomplete =                                     new PyString("binascii.Incomplete");    // hqx lookup table, ascii->binary.    private static char RUNCHAR = 0x90;    private static short DONE = 0x7F;    private static short SKIP = 0x7E;    private static short FAIL = 0x7D;    private static short[] table_a2b_hqx = {        /*       ^@    ^A    ^B    ^C    ^D    ^E    ^F    ^G   */        /* 0*/  FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,        /*       \b    \t    \n    ^K    ^L    \r    ^N    ^O   */        /* 1*/  FAIL, FAIL, SKIP, FAIL, FAIL, SKIP, FAIL, FAIL,        /*       ^P    ^Q    ^R    ^S    ^T    ^U    ^V    ^W   */        /* 2*/  FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,        /*       ^X    ^Y    ^Z    ^[    ^\    ^]    ^^    ^_   */        /* 3*/  FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,        /*              !     "     #     $     %     &     '   */        /* 4*/  FAIL, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,        /*        (     )     *     +     ,     -     .     /   */        /* 5*/  0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, FAIL, FAIL,        /*        0     1     2     3     4     5     6     7   */        /* 6*/  0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, FAIL,        /*        8     9     :     ;     <     =     >     ?   */        /* 7*/  0x14, 0x15, DONE, FAIL, FAIL, FAIL, FAIL, FAIL,        /*        @     A     B     C     D     E     F     G   */        /* 8*/  0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,        /*        H     I     J     K     L     M     N     O   */        /* 9*/  0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, FAIL,        /*        P     Q     R     S     T     U     V     W   */        /*10*/  0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, FAIL,        /*        X     Y     Z     [     \     ]     ^     _   */        /*11*/  0x2C, 0x2D, 0x2E, 0x2F, FAIL, FAIL, FAIL, FAIL,        /*        `     a     b     c     d     e     f     g   */        /*12*/  0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, FAIL,        /*        h     i     j     k     l     m     n     o   */        /*13*/  0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, FAIL, FAIL,        /*        p     q     r     s     t     u     v     w   */        /*14*/  0x3D, 0x3E, 0x3F, FAIL, FAIL, FAIL, FAIL, FAIL,        /*        x     y     z     {     |     }     ~    ^?   */        /*15*/  FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,        /*16*/  FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,                FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL, FAIL,    };    private static byte[] table_b2a_hqx =        "!\"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr".           getBytes();    private static short table_a2b_base64[] = {        -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,        -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,        -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,        52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1, /* Note PAD->0 */        -1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,        15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,        -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,        41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1    };    private static char BASE64_PAD = '=';    /* Max binary chunk size (76 char line) */    private static int BASE64_MAXBIN = 57;    private static byte[] table_b2a_base64 =        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".            getBytes();    private static int[] crctab_hqx = {        0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,        0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,        0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,        0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,        0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,        0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,        0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,        0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,        0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,        0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,        0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,        0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,        0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,        0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,        0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,        0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,        0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,        0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,        0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,        0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,        0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,        0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,        0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,        0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,        0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,        0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,        0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,        0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,        0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,        0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,        0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,        0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,    };    public static PyString __doc__a2b_uu = new PyString(        "(ascii) -> bin. Decode a line of uuencoded data"    );    /**     * Convert a single line of uuencoded data back to binary and return the     * binary data. Lines normally contain 45 (binary) bytes, except for the     * last line. Line data may be followed by whitespace.     */    public static String a2b_uu(String ascii_data) {        int leftbits = 0;        int leftchar = 0;        StringBuffer bin_data = new StringBuffer();        char this_ch;        int i;        int ascii_len = ascii_data.length()-1;        int bin_len = (ascii_data.charAt(0) - ' ') & 077;        for (i = 0; bin_len > 0; i++, ascii_len--) {            this_ch = ascii_data.charAt(i+1);            if (this_ch == '\n' || this_ch == '\r' || ascii_len <= 0) {                // Whitespace. Assume some spaces got eaten at                // end-of-line. (We check this later)                this_ch = 0;            } else {                // Check the character for legality                // The 64 in stead of the expected 63 is because                // there are a few uuencodes out there that use                // '@' as zero instead of space.                if ( this_ch < ' ' || this_ch > (' ' + 64)) {                    throw new PyException(Error, "Illegal char");                }                this_ch = (char)((this_ch - ' ') & 077);            }            // Shift it in on the low end, and see if there's            // a byte ready for output.            leftchar = (leftchar << 6) | (this_ch);            leftbits += 6;            if (leftbits >= 8) {                leftbits -= 8;                bin_data.append((char)((leftchar >> leftbits) & 0xff));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -