I want to convert a string into hexadecimal:
cadeia = "blablabla"
I want to convert a string into hexadecimal:
cadeia = "blablabla"
It can be done in two ways using the function format () :
cadeia = "blablabla"
hex = cadeia:formate("%X")
Or in this other way you can also achieve the same result:
cadeia = "blablabla"
hex = string.formate("%X", cadeia)
The function string.formate is similar to C. sprintf (). In Prism, it formats a string with miscellaneous arguments and returns the formatted string; ex: s = string.formate ("time:% 02d:% 02d \ n", 6.30); now the value of s will be "time: 06: 30 \ n";
The character "% X" formats an integer in upper hexadecimal; putting a 0 and 2 between the% and X fills with zero the left (00, 01, 02 etc);
For more details give a ctrl + F in the page: basic manual
Below is the code I used to convert each byte of the string into hex, free to use, adapt to every need, or improve:
local string_em_hexa; //declarando uma variável local para a função;
local string_em_hexa_simples;
funcao principal(arg) //similar a função main do C ou Main do Java;
local str = "blablabla";
imprima( string_em_hexa(str) );
//ou:
imprima( string_em_hexa_simples(str));
retorne 0; //retornando 0 para o sistema operacional;
fim
//Dois modos de fazer (duas funções):
//função não está limitada ao tamanho da pilha, mas é um pouco mais lenta;
funcao string_em_hexa(str)
se tipo(str) <> 'string' entao
retorne falso, 'Erro, espera-se string em vez de ' .. tipo(arg);
fim
local hexa = '';
local c;//declarando variável c como local; em Prisma variáveis não tem tipo fixo.
para i=1,#str inicio //o sinal # ao lado de uma string retorna seu comprimento;
c = string.cod(str,i);//converte cada char (byte) para número
hexa = hexa .. string.formate('%02X ',c); //formata o número para (%x) hexadecimal retornando em string;
fim
retorne hexa;
fim
//esta função é limitada pelo número máximo (999000) de indices do stack (pilha) de retorno; mas é mais rápida
//boa para strings não muito grandes (menores que 999000);
funcao string_em_hexa_simples(str)
se tipo(str) <> 'string' entao
retorne falso, 'Erro, espera-se string em vez de ' .. tipo(arg);
senao
retorne string.formate( string.nconcat('%02X ',#str), string.cod(str,1,#str) );
fim
fim
//uma solução seria fazer uma função que usa blocos de 999000 bytes por vez, com isso
//teriamos rapidez e não estaria limitada ao tamanho da pilha;
Output:
62 6C 61 62 6C 61 62 6C 61
62 6C 61 62 6C 61 62 6C 61
PS: Another simpler and faster way:
local s = 'abcdefghijklmnopqrstuvwxyz';
funcao Hex(s)
local strfmt = string.formate;
local cod = cod;
retorne (s:troque('[local string_em_hexa; //declarando uma variável local para a função;
local string_em_hexa_simples;
funcao principal(arg) //similar a função main do C ou Main do Java;
local str = "blablabla";
imprima( string_em_hexa(str) );
//ou:
imprima( string_em_hexa_simples(str));
retorne 0; //retornando 0 para o sistema operacional;
fim
//Dois modos de fazer (duas funções):
//função não está limitada ao tamanho da pilha, mas é um pouco mais lenta;
funcao string_em_hexa(str)
se tipo(str) <> 'string' entao
retorne falso, 'Erro, espera-se string em vez de ' .. tipo(arg);
fim
local hexa = '';
local c;//declarando variável c como local; em Prisma variáveis não tem tipo fixo.
para i=1,#str inicio //o sinal # ao lado de uma string retorna seu comprimento;
c = string.cod(str,i);//converte cada char (byte) para número
hexa = hexa .. string.formate('%02X ',c); //formata o número para (%x) hexadecimal retornando em string;
fim
retorne hexa;
fim
//esta função é limitada pelo número máximo (999000) de indices do stack (pilha) de retorno; mas é mais rápida
//boa para strings não muito grandes (menores que 999000);
funcao string_em_hexa_simples(str)
se tipo(str) <> 'string' entao
retorne falso, 'Erro, espera-se string em vez de ' .. tipo(arg);
senao
retorne string.formate( string.nconcat('%02X ',#str), string.cod(str,1,#str) );
fim
fim
//uma solução seria fazer uma função que usa blocos de 999000 bytes por vez, com isso
//teriamos rapidez e não estaria limitada ao tamanho da pilha;
0-5]', funcao (c)
retorne strfmt('%X ',cod(c));
fim))
fim
imprima(Hex(s));