【发布时间】:2015-12-19 02:23:49
【问题描述】:
例如,ActionScript 中是否存在可以将0x4e544c4d 转换为 ASCII 字符串“NTLM”的方法?
【问题讨论】:
标签: actionscript hex ascii
例如,ActionScript 中是否存在可以将0x4e544c4d 转换为 ASCII 字符串“NTLM”的方法?
【问题讨论】:
标签: actionscript hex ascii
你可以这样试试:
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;
}
【讨论】:
我找到了实现您所要求的“本机方式”:writeInt/writeByte 和 toString 方法的组合 flash.utils.ByteArray:
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
当然,您需要注意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
【讨论】:
hexToAscii 的函数,它从第二个 sn-p 的第 6 行开始,它封装了 ActionScript3 中存在的用于将十六进制数字/字符串转换为 ASCII 字符串的原生、非常低级别的支持。我知道你要求这样的东西。但也许我误解了你。当然,这取决于您的用例的复杂性。当您知道您只有数字范围内的值时,只需使用第一个 sn-ps 之类的东西。无论如何:我仍然认为我对您的问题给出了有效的答案:)