Existe-t-il un moyen de stocker une grande vitesse arbitraire dans une séquence de bits, mais seulement la plus tard pour le convertir en une structure standard de Bigint?

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

  •  29-09-2020
  •  | 
  •  

Question

J'essaie d'imaginer une façon de coder un Bigint dans un flux de bits, de sorte qu'il ne soit littéralement qu'une séquence de bits.Ensuite, lors de la décodage de ce flux de bits, vous généreriez le type standard de la structure de données (tableau de petits entiers avec un signe).Comment pouvez-vous encoder le Bigint comme une séquence de bits et comment le décocheriez-vous?Je ne vois pas comment effectuer correctement les manipulations des bits ou la manière de coder un nombre arbitraire dans des bits supérieurs à 32 ou 64. Si une langue est requise, je le ferais en JavaScript.

Par exemple, cela prend des octets et la convertit en un seul flux de bits:

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

Comment feriez-vous ce même type de chose pour des séquences de bits arbitrairement longues?

Était-ce utile?

La solution

Regardez à l'exemple du delta Elias ou de la gamma.

Autres conseils

Il y a Beaucoup de codages communs pour des entiers de longueur arbitraire. Je dirais que les représentations les plus utilisées sont:

  • représentations de données de longueur, où le nombre d'octets / mots est écrit en premier, suivi des données.
  • une représentation "Bit de continuation". Si la taille de mot est b bits, un entier est divisé en groupes de bits B-1 , avec le bit de commande élevé indiquant s'il existe un autre octet après ou non.

Vous pouvez mélanger et correspondre à ceux-ci. ASN.1 Règles de codage de base sont Un cas à l'autre, où dans le cas général, le champ Longueur est codé dans la base 128 en utilisant le bit de continuement. ASN.1 BER est utilisé dans de nombreux protocoles de réseau, tels que la VoIP, SNMP et LDAP, ainsi que dans Cryptographie , où représentant de gros entiers est une chose commune.

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top