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

m
 
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 31: Linha 31:


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.
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.
== 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
2 402

edições