Discussão:Código Natural/Notação posicional: mudanças entre as edições

De Documentação
Linha 2: Linha 2:


== Exemplos da RFC 4648 ==
== Exemplos da RFC 4648 ==
O escopo da  RFC 4648 é a expanção de bytes para o modo textual. Partimos do valor do byte, que equivale a uma notação base256:
O escopo da  RFC 4648 é a expansão de bytes para o modo textual. Partimos do valor do byte, que '''equivale a uma notação base256''':
<pre>
<pre>
   ASCII("a")=97;  ASCII("b")=98
   ASCII("a")=97;  ASCII("b")=98
Linha 8: Linha 8:
   "fo" = 102*256 + 111 = 26112 + 111 = 26223
   "fo" = 102*256 + 111 = 26112 + 111 = 26223
</pre>
</pre>
Em seguida, a cada sequência de bytes não-múltipla da base, converte-se o equivalente numérico:
Em seguida, a cada sequência de bytes, converte-se o equivalente numérico como se fosse notação Base256:
*  {{baseNh|f|256}} = [102]<sub>10</sub> = {{baseNh|66|16}}
*  {{baseNh|f|256}} = [102]<sub>10</sub> = {{baseNh|66|16}}
*  {{baseNh|fo|256}} = [26223]<sub>10</sub> = {{baseNh|666F|16}}<br/> ou, destacando a função de conversão, BASE16({{baseNh|fo|256}}) = {{baseNh|666F|16}}
*  {{baseNh|fo|256}} = [26223]<sub>10</sub> = {{baseNh|666F|16}}<br/> ou, destacando a função de conversão, BASE16({{baseNh|fo|256}}) = {{baseNh|666F|16}}
Linha 26: Linha 26:
   BASE64("foobar") = "Zm9vYmFy"
   BASE64("foobar") = "Zm9vYmFy"
</pre>
</pre>
Como 16²=256 podemos dispensar a conversão de equivalente numérico, já que um dígito base&nbsp;256 resulta sempre exatamente em 2 dígitos base&nbsp;16. Para dispensar o equivalente numérico na conversão para base&nbsp;64 é mais complicado, precisamos esperar por 3 dígitos base&nbsp;256 para obter exatamente 4 dígitos base&nbsp;64: 256<sup>3</sup>&nbsp;=&nbsp;64<sup>4</sup>&nbsp;=&nbsp;16777216. Portanto se o número de bytes a serem convertidos para a base&nbsp;64 não for múltiplo de 3, será necessário o "padding", e o valor não preservará hierarquia.

Edição das 09h47min de 16 de julho de 2023


Exemplos da RFC 4648

O escopo da RFC 4648 é a expansão de bytes para o modo textual. Partimos do valor do byte, que equivale a uma notação base256:

   ASCII("a")=97;   ASCII("b")=98
   ASCII("f")=102;  ASCII("o")=111
   "fo" = 102*256 + 111 = 26112 + 111 = 26223

Em seguida, a cada sequência de bytes, converte-se o equivalente numérico como se fosse notação Base256:

  • f256 = [102]10 = 6616
  • fo256 = [26223]10 = 666F16
    ou, destacando a função de conversão, BASE16(fo256) = 666F16
  • BASE16(foo256) = 666F6F16
  • ...

Na RFC foi destacada a função de conversão, conforme reproduzido abaixo, da seção 10 da RFC 4648:

   BASE16("") = ""
   ...
   BASE16("foo") = "666F6F"
   ...
   BASE64("") = ""
   BASE64("f") = "Zg=="
   BASE64("fo") = "Zm8="
   BASE64("foo") = "Zm9v"
   BASE64("foobar") = "Zm9vYmFy"

Como 16²=256 podemos dispensar a conversão de equivalente numérico, já que um dígito base 256 resulta sempre exatamente em 2 dígitos base 16. Para dispensar o equivalente numérico na conversão para base 64 é mais complicado, precisamos esperar por 3 dígitos base 256 para obter exatamente 4 dígitos base 64: 2563 = 644 = 16777216. Portanto se o número de bytes a serem convertidos para a base 64 não for múltiplo de 3, será necessário o "padding", e o valor não preservará hierarquia.