De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Paulo Roberto Bagatini
Data de Publicação: 19 de fevereiro de 2013
Umas das capacidades inatas do BASh, um dos shell texto mais usados, é a manipulação de números em bases numéricas outras que não a decimal.
$ echo $((844)) # decimal 844 $ echo $((0x34c)) # hexadecimal 844 $ echo $((01514)) # octal 844 $ echo $((2#1101001100)) # binario 844 $ echo $((21#1j4)) # base 21 ->QUALQUER BASE! 844
$ echo $(( 2#1101001100 * 0x34c + 21#1j4)) # 844 * 844 + 844
713180
A conversão de decimal para outras bases não é tão "nativa". Então, naturalmente, existem várias formas de fazer. Aqui vão algumas sugestões, priorizando o não uso de loops.
$ dec=844 $ printf '%x\n' $dec # para hexadecimal 34c $ printf '%X\n' $dec 34C $ printf '%o\n' $dec # para octal 1514 $ bc <<< "obase=2;$dec" # para binario 1101001100 $ bc <<< "obase=21;$dec" # para base 21 ->QUALQUER BASE! 01 19 04 $ # usando letras como digitos para bases maiores que 10 $ eval echo -e $(bc <<< "obase=21;$dec" | sed -r 's/ [1-9][0-9]/\\\\x$(printf %x $((&-9+96)))/g;s/ 0//g') 1j4
$ bc <<< "obase=16;ibase=2;1101001100" 34C $ bc <<< "ibase=2;obase=1010;11" # cuidado com a ordem das variáveis ibase e obase ;-) 3
$ echo -e \\x$(printf %x 65)
A
$ echo -n A | od -td1 | grep -Eo " [0-9]+"
65
$ string='http://uma_url/~user/index.html?parm1=VAL1&parm2=ã-ç'
$ echo -n "$string" | od -tx1 | grep -Eo "( ..)+$" | tr " a-z" "%A-Z" | tr -d "\n"; echo
%68%74%74%70%3A%2F%2F%75%6D%61%5F%75%72%6C%2F%7E%75%73%65%72%2F%69%6E%64%65%78%2E%68%74%6D%6C%3F%70%61%72%6D%31%3D%56%41%4C%31%26%70%61%72%6D%32%3D%C3%A3%2D%C3%A7
$ eval echo $(sed -r 's/[^A-Za-z0-9._~-]/$(echo -n "\\&" | od -tx1 | grep -Eo "( ..)+$" | tr " a-z" "%A-Z")/g;s/\\([^\\"])/\1/g' <<< $string)
http%3A%2F%2Fuma_url%2F~user%2Findex.html%3Fparm1%3DVAL1%26parm2%3D%C3%A3-%C3%A7
$ echo -n A | od -tx1 | grep -Eo " ..+" 41 $ echo -n Ç | od -tx1 | grep -Eo " ..+" c3 87 $ echo -n Ç | iconv -f utf8 -t latin1 | od -tx1 | grep -Eo " ..+" c7 $ echo $((0xc7)) 199
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários