Discussão:Código Natural/Notação posicional
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:
f
256 = [102]10 =66
16fo
256 = [26223]10 =666F
16
ou, destacando a função de conversão, BASE16(fo
256) =666F
16- BASE16(
foo
256) =666F6F
16 - ...
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
- generico diversas baeses, https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/charconv#L107
- __to_chars_16 https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/charconv#L176
- ... inversa (prefix 0x or 0X indicating hexadecimal base - applies only when the base is 16 or 0), https://en.cppreference.com/w/cpp/string/basic_string/stol
Outras dicas sobre a conversão em C:
- sprintf o mais popular, https://stackoverflow.com/a/9636892/287948
- algoritmos similares, https://stackoverflow.com/a/4966309/287948