Existe uma maneira de armazenar uma arbitrariamente grande BigInt em uma sequência de bits, e só depois convertê-lo em um padrão BigInt estrutura?

cs.stackexchange https://cs.stackexchange.com/questions/128035

  •  29-09-2020
  •  | 
  •  

Pergunta

Estou tentando imaginar uma forma de codificação de um BigInt em um fluxo de bits, de forma que ele é, literalmente, apenas uma seqüência de bits.Em seguida, após a decodificação esse fluxo de bits, você deve gerar o padrão BigInt tipo de estrutura de dados (matriz de pequenos números inteiros com sinal).Como você poderia codificar o BigInt como uma seqüência de bits, e como você iria decodificá-lo?Eu não vejo como executar corretamente o bit a bit manipulações ou como codificar um número arbitrário de bits maior do que a de 32 ou de 64.Se uma língua é necessário, então eu estaria fazendo isso em JavaScript.

Por exemplo, isso leva bytes e a converte em um único fluxo de bits:

function arrayOfBytesTo32Int(map) {
  return map[0] << 24
    | map[1] << 16
    | map[2] << 8
    | map[3]
}

Como você faria o mesmo tipo de coisa para arbitrariamente longas sequências de bits?

Foi útil?

Solução

Olhar para Elias delta ou gama de codificação como um exemplo.

Outras dicas

muitas codificações comuns para arbitrário de comprimento números inteiros.Eu diria que a maioria das representações são:

  • Comprimento-representações de dados, onde o número de bytes/palavras é escrito primeiro, seguido dos dados.
  • Uma "continuação bit" representação.Se o tamanho de palavra é b bits, em seguida, um número inteiro é dividido em grupos de b-1 bits, com o bit de ordem alta, denotando-se se há outro byte seguinte ou não.

Você pode misturar e combinar estes.O ASN.1 Regras De Codificação Básica são um caso em questão, onde, no caso geral, o comprimento do campo é codificado em base de 128 usando o continutation pouco.ASN.1 BER é usado em muitos protocolos de rede, tais como VoIP, SNMP, e o LDAP, bem como em criptografia, onde representa grandes números inteiros é uma coisa comum.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a cs.stackexchange
scroll top