2014-07-26 150 views
0

我希望有人可以幫助我在這裏我一直在爲此奮鬥了幾天。as3 ByteArray轉爲十六進制(二進制十六進制表示)

我收到一個UDP數據包通過AS3 UDP數據報套接字格式的二進制十六進制表示(我相信是RAW 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 

這是我在閃光輸出(不需要相同的間距和換行符一樣的結構,從看它看起來像它移除?零我不知道爲什麼它這樣做):

十六進制= 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

它看起來像我找到了解決方案!正如我所做的那樣,挖掘和從颶風公用事業類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接收的UDP分組轉換後從ByteArray的十六進制:

EFBEADDE655AF9025E000000FA1DFB4400000000000000000000000000000000020201058B1B4A3A040000000000010011000000 

(這些都不在準確的時間拍攝到的完全一樣的數據包,所以他們會看起來有點不同)。