Есть ли способ хранить произвольно большой бигиту в немного последовательности, только позже, чтобы преобразовать его в стандартную структуру Bigint?

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

  •  29-09-2020
  •  | 
  •  

Вопрос

Я пытаюсь представить себе способ кодирования бигинта в немного поток, чтобы он был буквально просто последовательностью битов.Затем при декодировании этого потока битов вы будете генерировать стандартную структуру данных BIGINT в виде данных (массив мелких целых чисел со знаком).Как вы могли бы кодировать бигиту как последовательность битов, и как бы вы его декодировали?Я не вижу, как правильно выполнять побитовые манипуляции или как кодировать произвольное число в битах более 32 или 64. Если требуется язык, я бы сделал это в JavaScript.

Например, это принимает байты и преобразует его в один битовый поток:

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

Как бы вы сделали эту же вещь для произвольно длинных последовательностей?

Это было полезно?

Решение

Посмотрите на Delta или гамма-кодирование Elias в качестве примера.

Другие советы

Есть Многие распространенные кодировки для целых чисел произвольной длины. Я бы сказал, что наиболее используемые представления:

    .
  • Представления данных - данные, где число байтов / слов записывается первым, а затем данные.
  • «Продолжение бита» представление. Если размер слов B Bits, то целое число разделено на группы битов B-1 , с битом высокого порядка, обозначающей, есть ли другой байт или нет.

Вы можете смешивать и сочетать их. Асн.1 Основные правила кодирования Чехол в точке, где в общем случае поле длины кодируется в базе 128, используя бит продолжения. ASN.1 BER используется во многих сетевых протоколах, таких как VoIP, SNMP и LDAP, а также в Криптография , где представляют большие целые числа - это общее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top