as3 ByteArray到Hex(二进制十六进制表示)

时间:2014-07-26 18:11:23

标签: actionscript-3 flash udp hex bytearray

我希望有人可以帮助我,我已经在这几天挣扎了。

我通过AS3 UDP数据报套接字以二进制十六进制表示形式(我认为是RAW UDP数据)接收UDP数据包。

当我在as3中收到UDP数据包时,它需要转换回原始十六进制格式的ByteArray格式。

这应该是它的样子:

EF BE AD DE
22 5C 88 06
5E 00 00 00
7C 11 FB 44
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
02 02 01 05
91 EE FE F4
04 00 00 00
00 00 01 00
11 00 00 00

这是我在flash中的输出(它不需要相同的间距和换行符只是相同的结构,从看它看起来像删除零?我不知道它为什么这样做):< / p>

hex = efbeaddea05b9515e0007d11fb440000000000000000221595ee76f54000001011000

这是我的as3功能:

public function hex(data:ByteArray){
    var hex:String = "";
    data.position = 0;
    var len:uint = data.length;
    for (var i:uint = 0; i < len; ++i){
        var byte:uint = data.readUnsignedByte();
        hex += byte.toString(16).substr(-2);
    }
    trace("hex= "+hex);
}

任何帮助都将不胜感激!!

1 个答案:

答案 0 :(得分:2)

看起来我找到了解决方案!因为我做了一点挖掘并从hurlant实用程序类Hex.as中遇到了这个函数,这似乎正在做的伎俩!将在进一步调查后报告。

指向课程的链接:https://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/util/Hex.as?r=4

在导入课程后,我需要改变的是:

trace("hex= "+Hex.fromArray(event.data);

这是实际的功能:

public static function fromArray(array:ByteArray, colons:Boolean=false):String {
        var s:String = "";
        for (var i:uint=0;i<array.length;i++) {
                s+=("0"+array[i].toString(16)).substr(-2,2);
                if (colons) {
                        if (i<array.length-1) s+=":";
                }
        }
        return s;
}

原始UDP数据包(删除了所有填充):

EFBEADDE275A89005E000000FA1DFB440000000000000000000000000000000002020105891B0E3A040000000000010011000000

as3在从byteArray转换为十六进制后收到UDP数据包:

EFBEADDE655AF9025E000000FA1DFB4400000000000000000000000000000000020201058B1B4A3A040000000000010011000000

(这些不是在确切时间捕获的完全相同的数据包,因此它们看起来有点不同)。