wcvrtyu 2014-04-14 10:02
浏览 903

各位大神求解,小弟跪求解,代码问题如下

virtual public byte[] Decode (string data) {
var outStream = new List ();

        int length = data.Length;
        while (length > 0) {
            if (!this.Ignore (data[length - 1])) break;
            length--;
        }

        int i = 0;
        int finish = length - 8;
        for (i = this.NextI (data, i, finish); i < finish; i = this.NextI (data, i, finish)) {
            byte b1 = dTable[data[i++]];
            i = this.NextI (data, i, finish);
            byte b2 = dTable[data[i++]];
            i = this.NextI (data, i, finish);
            byte b3 = dTable[data[i++]];
            i = this.NextI (data, i, finish);
            byte b4 = dTable[data[i++]];
            i = this.NextI (data, i, finish);
            byte b5 = dTable[data[i++]];
            i = this.NextI (data, i, finish);
            byte b6 = dTable[data[i++]];
            i = this.NextI (data, i, finish);
            byte b7 = dTable[data[i++]];
            i = this.NextI (data, i, finish);
            byte b8 = dTable[data[i++]];

            outStream.Add ((byte)((b1 << 3) | (b2 >> 2)));
            outStream.Add ((byte)((b2 << 6) | (b3 << 1) | (b4 >> 4)));
            outStream.Add ((byte)((b4 << 4) | (b5 >> 1)));
            outStream.Add ((byte)((b5 << 7) | (b6 << 2) | (b7 >> 3)));
            outStream.Add ((byte)((b7 << 5) | b8));
        }
        this.DecodeLastBlock (outStream,
            data[length - 8], data[length - 7], data[length - 6], data[length - 5],
            data[length - 4], data[length - 3], data[length - 2], data[length - 1]);

        return outStream.ToArray ();
    }

    virtual protected int DecodeLastBlock (ICollection<byte> outStream, char c1, char c2, char c3, char c4, char c5, char c6, char c7, char c8) {
        if (c3 == padding) {
            byte b1 = dTable[c1];
            byte b2 = dTable[c2];
            outStream.Add ((byte)((b1 << 3) | (b2 >> 2)));
            return 1;
        }

        if (c5 == padding) {
            byte b1 = dTable[c1];
            byte b2 = dTable[c2];
            byte b3 = dTable[c3];
            byte b4 = dTable[c4];
            outStream.Add ((byte)((b1 << 3) | (b2 >> 2)));
            outStream.Add ((byte)((b2 << 6) | (b3 << 1) | (b4 >> 4)));
            return 2;
        }

        if (c6 == padding) {
            byte b1 = dTable[c1];
            byte b2 = dTable[c2];
            byte b3 = dTable[c3];
            byte b4 = dTable[c4];
            byte b5 = dTable[c5];

            outStream.Add ((byte)((b1 << 3) | (b2 >> 2)));
            outStream.Add ((byte)((b2 << 6) | (b3 << 1) | (b4 >> 4)));
            outStream.Add ((byte)((b4 << 4) | (b5 >> 1)));
            return 3;
        }

        if (c8 == padding) {
            byte b1 = dTable[c1];
            byte b2 = dTable[c2];
            byte b3 = dTable[c3];
            byte b4 = dTable[c4];
            byte b5 = dTable[c5];
            byte b6 = dTable[c6];
            byte b7 = dTable[c7];

            outStream.Add ((byte)((b1 << 3) | (b2 >> 2)));
            outStream.Add ((byte)((b2 << 6) | (b3 << 1) | (b4 >> 4)));
            outStream.Add ((byte)((b4 << 4) | (b5 >> 1)));
            outStream.Add ((byte)((b5 << 7) | (b6 << 2) | (b7 >> 3)));
            return 4;
        }

        else {
            byte b1 = dTable[c1];
            byte b2 = dTable[c2];
            byte b3 = dTable[c3];
            byte b4 = dTable[c4];
            byte b5 = dTable[c5];
            byte b6 = dTable[c6];
            byte b7 = dTable[c7];
            byte b8 = dTable[c8];
            outStream.Add ((byte)((b1 << 3) | (b2 >> 2)));
            outStream.Add ((byte)((b2 << 6) | (b3 << 1) | (b4 >> 4)));
            outStream.Add ((byte)((b4 << 4) | (b5 >> 1)));
            outStream.Add ((byte)((b5 << 7) | (b6 << 2) | (b7 >> 3)));
            outStream.Add ((byte)((b7 << 5) | b8));
            return 5;
        }
    }

    protected int NextI (string data, int i, int finish) {
        while ((i < finish) && this.Ignore (data[i])) i++;

        return i;
    }

    protected bool Ignore (char c) {
        return (c == '\n') || (c == '\r') || (c == '\t') || (c == ' ') || (c == '-');
    }

    protected void InitialiseDecodingTable () {
        for (int i = 0; i < eTable.Length; i++) {
            dTable[eTable[i]] = (byte)i;
        }
    }

小弟新晋码农,不是很懂flash的as语言,请问这段c#代码中(byte)i如何在as3.0中实现,还有在as3.0中如何用byte数据类型,我查了很多资料,但是还是不会,例如byte b1,求大神用as3.0帮我编写一个byte类。其中dTable是ByteArray。,小弟在此跪谢。

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 Python爬取指定微博话题下的内容,保存为txt
    • ¥15 vue2登录调用后端接口如何实现
    • ¥65 永磁型步进电机PID算法
    • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
    • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
    • ¥15 如何处理复杂数据表格的除法运算
    • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥15 latex怎么处理论文引理引用参考文献
    • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?