2015-09-22 105 views

回答

1

你可以嘗試這樣的:

function HexToASCII(s:String):String { 
    var hexChar:String; 
    var finalString:String = ""; 
    for (var i = 0; i < s.length/2; i++) { 
     hexChar = s.charAt(i*2).toString()+s.charAt((i*2)+1).toString(); 
     hexChar = "0x"+hexChar; 
     finalString = finalString+String.fromCharCode(parseInt(hexChar)); 
    } 
    return finalString; 
} 
+0

好吧,其實我只是想知道是否有現有的動作,可以做到這一點的方法。 –

0

我發現了 「原生方式」 才達到你的要求爲:

import flash.utils.ByteArray; 

var hex:String = '0x4e544c4d'; 
var hexNum:int = parseInt(hex); 
var bytes:ByteArray = new ByteArray(); 
bytes.writeInt(hexNum); 
trace(bytes.toString()); //prints NTLM 
:方法 writeInt/ writeByteflash.utils.ByteArray toString組合

當然你需要注意最大值parseInt返回(Number只能包含53位),以及在寫入ByteArray時如何匹配。我做了一個小函數來處理更長的十六進制字符串:

import flash.utils.ByteArray; 

var hex:String = '0x4e544c4d204e544c4d204e544c4d'; 
trace(hexToAscii(hex));//NTLM NTLM NTLM 

function hexToAscii(hex:String):String { 
    if (hex.indexOf('0x') === 0){ 
     hex = hex.substr(2); 
    } 
    var bytes:ByteArray = new ByteArray(); 
    while (hex.length > 1){ 
     bytes.writeByte(parseInt(hex.substr(0,2), 16)); 
     hex = hex.substr(2); 
    } 
    return bytes.toString(); 
} 

你可以用它玩:http://wonderfl.net/c/IUn2

+0

恩,這似乎很複雜,我寧願直接寫一個函數。 –

+0

恩,當然,你可以隨時寫一個函數。實際上我還寫了一個名爲'hexToAscii'的函數,它從第二個片段的第6行開始,它封裝了ActionScript3中用於將十六進制數字/字符串轉換爲ASCII字符串的本地非常低級別的支持。而且我明白你問過這樣的事情。但也許我誤解了你。這取決於你的用例的複雜性。當你知道你只有數值範圍內的值時,只需使用類似第一個片段的內容即可。無論如何:我仍然認爲我給你的問題一個有效的答案:) – karfau