Однобайтовые коды символов

0

Я пытаюсь реализовать алгоритм сжатия, и для этого мне нужно иметь массив однобайтовых кодов символов - они должны быть одиночными байтами. Я не знаком с тем, как обращаться с кодами символов в программировании, но в требованиях они должны быть однобайтными, а также не зависимыми от ОС/машин. Это так же просто, как целые значения от 0 до 255?

Я использовал следующий небольшой фрагмент, чтобы узнать, какие символы доступны мне, если это так:

for (int i = 0; i < 256; i++) {
    std::cout << (char)i << std::endl;
}

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

РЕДАКТИРОВАТЬ:

Более конкретно, я пытаюсь реализовать аналогичный алгоритм для этой статьи. Он прерывает последовательность ДНК в сегменты из 4 и преобразует их с помощью хеш-таблицы, поэтому, например, AAAA преобразуется в символ, кодируемый одним байтовым символом, AAAT преобразуется в один байт-символ. Для ДНК 4 байта в 1 байт довольно хорошее сжатие (хотя, если я хочу расширить алфавит от A, T, C, G до A, T, C, G, N и - мне понадобится 6 ^ 4 символа из 256, необходимых для 4-буквенного алфавита. Я мог бы уменьшить сжатие с 4 в 1 до 3 в одном, и только 216 однобайтовых кодов символов.

Это сжатие является частью того, что я пытаюсь написать, который должен читаться последовательностями из нескольких последовательностей последовательности (последовательности/строки из 6 буквенных алфавитов A, T, C, G, N и -), которые могут быть очень большими. И удалите все неинформативные для моей программы анализа. Я планирую сделать это, максимально сжав последовательность, затем найдя неинформативный материал в сжатом представлении, а затем расширив оставшийся материал, а затем сделаю вторую развертку и избавлюсь от оставшихся неинформативных материалов в несжатом представлении, прежде снова сжимая оставшиеся информативные материалы при подготовке к аналитической программе.

Возможно, есть лучшие схемы, чем схема хэша, я слышал о чем-то, называемом базовой схемой, о которой мне нужно прочитать. Я также подумал, что, возможно, после того, как строка ДНК будет сжата до 256 однобайтовых форматов, может ли она быть сжата с помощью методов, используемых для сжатия обычного текста?

  • 0
    Я бы лучше попробовал (unsigned char) i , не то чтобы это имело большое значение, так как первые 128 все равно печатались
Теги:
encoding
char

2 ответа

1

Почему вы видите этот вывод

Некоторые коды ASCII не подлежат печати. Используйте isprint() чтобы проверить, isprint() ли символ.

Также стоит отметить, какая кодировка используется вашей оболочкой. В современных настройках используется UTF-8, поэтому, если вы пытаетесь распечатать расширенные коды ASCII, они могут быть интерпретированы (некорректно) в виде многобайтовых UTF-8 последовательностей вместо ASCII при выводе на терминал.

Как работать с двоичными данными

Если вы работаете над алгоритмами, которые работают с двоичными данными, такими как сжатие, вам лучше не обращать внимания на кодировки символов. Избегайте интерпретации данных в виде строк в терминале и рассматривайте его как последовательность целых чисел 0-255. Данные трубы в hexdump или печатать целочисленные значения каждого байта при отладке.

0

Есть несколько наборов символов. Если вам нужен одиночный байт -guaranteed single byte-, вам нужен набор символов ASCII. Вы можете использовать определенную кодовую страницу, если хотите поддерживать неанглийский язык, но вам придется решить, какой из них.

Также обратите внимание, что вы можете вычислять с char (который является 8 бит, подписанным) и байтом (который является 8 бит, без знака).

Вот список персонажей и их интерпретация: http://en.wikipedia.org/wiki/ASCII

Наборы символов определенно зависят от ОС. Я бы посоветовал вам работать с UTF-8 и знать, что-почти - вы получите одиночные байты символов.

PS Если вы сжимаете файлы, зачем вам все равно? Чтение файла byte- по байтам (или char-by-char) и воспроизведение тех же байтов/символов на другой стороне, безусловно, будет работать.

  • 0
    Просто обновил вопрос, добавив немного больше информации о том, что я пытаюсь сделать более конкретно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню