Converter ASCII em hexadecimal em JavaScript
- Converter um caractere ASCII em hexadecimal em JavaScript
- Convertendo uma string de ASCII em equivalente hexadecimal em JavaScript
- Converter hexadecimal de volta para ASCII
A intenção principal de desenvolver o Código Padrão Americano para Intercâmbio de Informações (ASCII) era a troca de dados entre dispositivos. ASCII é uma tabela de códigos que possui caracteres legíveis por humanos e consiste em cada caractere mapeado para números específicos (os chamados códigos ASCII). Como os sistemas de números básicos binários usados por computadores, usamos sistemas de números hexadecimais durante a transmissão de dados por um canal para comunicação livre de erros. ASCII é um formato legível por humanos, que é usado internamente de forma diferente por computadores. Vamos ver como podemos converter um valor ASCII em um valor hexadecimal com JavaScript.
Converter um caractere ASCII em hexadecimal em JavaScript
A conversão é fácil e não requer muitas etapas no código. Vejamos o código para converter um caractere ASCII em hexadecimal.
window.onload =
function() {
convertASCIItoHex('A');
convertASCIItoHex('n');
convertASCIItoHex('!');
}
function convertASCIItoHex(asciiVal) {
let asciiCode = asciiVal.charCodeAt(0);
let hexValue = asciiCode.toString(16);
console.log('0x' + hexValue);
}
Resultado:
0x41
0x6e
0x21
Nesta seção, estamos lidando com a conversão de um caractere ASCII em seu equivalente hexadecimal. Temos o processo de conversão explicado a seguir.
-
Na função
window.onload()
do javascript, chamamos a funçãoconvertASCIItoHex()
para traduzir o valor ASCII para hexadecimal em javascript. A funçãowindow.onload()
é chamada no carregamento da página para que seja executada assim que a página for carregada. -
Na função
convertASCIItoHex()
, passamos o valor ASCII que precisa ser convertido.asciiVal.charCodeAt(0)
retorna o código ASCII do valor de entrada passado na funçãoconvertASCIItoHex()
como parâmetro. A tabela ASCII contém um mapeamento para o formato de letra legível por humanos e um código associado a eles. Parece o seguinte.DECIMAL HEXCODE Símbolo Descrição 65 41 UMA A maiúsculo 66 42 B B maiúsculo 67 43 C C maiúsculo 68 44 D D maiúsculo 69 45 E E maiúsculo 70 46 F F maiúsculo 71 47 G G maiúsculo 72 48 H H maiúsculo 73 49 eu I maiúsculo 74 4A J J maiúsculo A coluna decimal representa o código para o valor ASCII. Por exemplo, o código ASCII para A
é 65. A funçãoasciiVal.charCodeAt(0)
retorna o valor ASCII deasciiVal
que contém o valorA
. Portanto, ele retorna 65. Armazenamos o código ASCII na variávelasciiCode
. -
Depois de obter o código ASCII correspondente ao valor do parâmetro, nosso próximo passo é convertê-lo em hexadecimal. No fragmento
asciiCode.toString(16)
, a função.toString(16)
retorna o valor hexadecimal como uma string. Armazenamos o valor da string hexadecimal na variávelhexValue
. -
Na etapa final, consolamos o equivalente hexadecimal do atributo passado usando a função
console.log()
do JavaScript.
Observação
-
Pode parecer estranho acrescentar a palavra-chave
0x
ao valor hexadecimal convertido. É uma abordagem comum seguida em javascript para identificar o número como um valor hexadecimal (consulte Documentos do MSDN para obter mais detalhes). Para o seu propósito comercial, podemos evitá-lo e seguir a saída do valor hexadecimal da função.toString(16)
. -
A função
toString(16)
é uma função polivalente em javascript. Podemos usá-lo para converter para diferentes sistemas de base numérica. Precisamos passar a base decimal ou raiz como um parâmetro para a função. Se aguardarmos um equivalente binário do código ASCII, a funçãotoString(2)
retornará o equivalente binário do valor decimal. A função fará o typecast do objeto em uma string antes de retornar o valor binário. E, portanto, o tipo de retorno de.toString()
é string. -
O código acima considera apenas uma conversão de caractere. Portanto, se você fornecer uma string como entrada como
convertASCIItoHex("HELLO")
, a função retornará o valor hexadecimal da primeira letraH
. Isso é feito pela funçãocharCode(0)
emasciiVal.charCodeAt(0)
.
Convertendo uma string de ASCII em equivalente hexadecimal em JavaScript
Os requisitos mais comuns que recebemos em nossas vidas são converter uma string como um todo no valor hexadecimal equivalente em vez de um caractere. O programa a seguir recebe uma string como entrada e retorna uma string hexadecimal equivalente para cada caractere como saída. Cada valor hexadecimal será separado por ' '
um espaço para melhor legibilidade e compreensão.
window.onload =
function() {
convertASCIItoHex('Hello!');
convertASCIItoHex('Good Morning World!!');
}
function convertASCIItoHex(asciiString) {
let hex = '';
let tempASCII, tempHex;
asciiString.split('').map(i => {
tempASCII = i.charCodeAt(0)
tempHex = tempASCII.toString(16);
hex = hex + tempHex + ' ';
});
hex = hex.trim();
console.log(hex);
}
Ouput:
48 65 6c 6c 6f 21
47 6f 6f 64 20 4d 6f 72 6e 69 6e 67 20 57 6f 72 6c 64 21 21
Aqui, convertASCIItoHex()
retorna um valor de string hexadecimal correspondente à entrada de string fornecida. Ele retornará um valor do tipo String
. A sequência de códigos hexadecimais é separada por espaços para facilitar a leitura e clareza. Vejamos as etapas que seguimos.
-
Conforme discutido na seção anterior, chamamos a função
window.onload()
do javascript e, em seguida, chamamos a funçãoconvertASCIItoHex("Hello!")
Passando uma string"Hello!"
como um parâmetro para ele. -
Na função
convertASCIItoHex()
, dividimos a string de entrada em caracteres para facilitar o processamento. Portanto, nesta fase, a string"Hello!"
Se converte em["H", "e", "l", "l", "o", "!"]
, um array de string. -
Em seguida, aplicamos “a conversão ASCII em hexadecimal” em cada elemento do array com o operador
.map()
de javascript. Ele itera por meio de cada elemento e executa uma função em cada um deles. Passamos a função como uma função embutida ou função de seta. -
Na função, usamos
charCodeAt(0)
para obter o código ASCII do elemento do array atual. Em seguida, no objeto de código ASCII, aplicamostoString(16)
para converter o valor ASCII em uma base hexadecimal. Em seguida, colocamos o valor hexadecimal no arrayhex
, o array de saída. Observe que usamos um espaço entre as conversões consecutivas para fins de legibilidade. Você também pode preferir usar,
ou;
separador conforme exigido pelas necessidades do negócio. -
Com
hex = hex + tempHex + ' '
acrescentamos um espaço após cada conversão de elemento. Portanto, o resultado final terá um espaço à direita. Para removê-lo, usamos a função.trim()
do javascript. -
Finalmente, a matriz de string convertida é registrada no console com o
console.log(hex)
.
Converter hexadecimal de volta para ASCII
Agora, como temos os valores hexadecimais prontos, a questão que surge é como podemos confirmar se a saída é a esperada. Alcançamos o núcleo da funcionalidade com a função fromCharCode(ASCIICode)
do javascript que retorna o caractere ASCII correspondente ao código ASCII passado no parâmetro. Aqui, podemos usar o seguinte código.
window.onload = function() {
convertASCIItoHex('48 65 6c 6c 6f 21');
convertASCIItoHex(
'47 6f 6f 64 20 4d 6f 72 6e 69 6e 67 20 57 6f 72 6c 64 21 21');
} function convertHexToASCII(hexString) {
let stringOut = '';
hexString.split(' ').map((i) => {
tempAsciiCode = parseInt(i, 16);
stringOut = stringOut + String.fromCharCode(tempAsciiCode);
});
console.log(stringOut);
}
Resultado:
Hello!
Good Morning World!!
Alguns métodos fazem a mágica aqui. parseInt(i, 16)
converte uma entrada de base 16
em base decimal. Portanto, com este método, obtemos o código ASCII para o valor hexadecimal. E o String.fromCharCode(tempAsciiCode)
pega o código ASCII passado como parâmetro para esta função e retorna o caractere ASCII correspondente ao código.
Observações
- A forma legível de ASCII mais comumente usada inclui alfabetos, números e caracteres especiais. Com os códigos javascript, pretendemos cobrir esses conjuntos de caracteres. Não podemos testar determinados códigos ASCII em JavaScript, como ACK: caractere de reconhecimento, ETX: caractere de fim de texto, etc.
- A variável de string JavaScript pode conter um comprimento máximo de 253-1 caracteres de acordo com os padrões ES8. E isso equivale a cerca de 512 MB de dados no Chrome e cerca de um Gigabyte de dados no Firefox. Portanto, podemos converter valores de string mais longos usando nosso código.