Discussão:Código Natural/Notação posicional

De Documentação

Notação de código-prefixo

Quando a base é conhecida, ao invés de apenas expressar 12345, se queremos destacar o prefixo "12" da parte significativa do identificador, temos 12345 com o template {{CodeP|12|345}}. Na falta da notação de destaque usar um ponto, 12.345.

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.

Algoritmos oficiais de conversão hexa

Provavelmente os mais eficientes e maduros sejam C e C++, para converter unsignedint to hexa:

Conforme Utility library https://en.cppreference.com/w/cpp/utility/chars_format

Outras dicas sobre a conversão em C: