2015-09-22 2 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

Все правильно, на самом деле я просто хочу знать, если есть способ существует в ActionScript, который может это сделать , –

0

Я нашел "нативный путь" для того чтобы достигнуть того, что вы просили: сочетание методов 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

+0

um, кажется, сложно, я бы предпочел написать функцию напрямую. –

+0

um, конечно, вы всегда можете написать функцию напрямую. на самом деле я также написал функцию «hexToAscii», она начинается с строки 6 второго фрагмента и инкапсулирует встроенную поддержку очень низкого уровня, которая существует в ActionScript3 для преобразования шестнадцатеричных чисел/строки в строку ASCII. И я понял, что вы просили что-то вроде этого. Но, может быть, я вас неправильно понял. И couse это зависит от сложности вашего прецедента. когда вы знаете, что у вас есть только значения в диапазоне Number, просто используйте что-то вроде первых фрагментов. Во всяком случае: я все еще думаю, что дал правильный ответ на ваш вопрос :) – karfau