C / C ++: как конвертировать 6-битный ASCII в 7-битный ASCII - PullRequest
2 голосов
/ 20 апреля 2009

У меня есть набор из 6 битов, которые представляют 7-битный символ ASCII. Как я могу получить правильный 7-битный код ASCII из 6 бит, которые у меня есть? Просто добавьте ноль и сделайте побитовое ИЛИ?

Спасибо за вашу помощь.

Леннарт

Ответы [ 5 ]

8 голосов
/ 20 апреля 2009

ASCII по своей сути является 7-битным набором символов, так что у вас не есть "6-битный ASCII". Какие персонажи составляют ваш набор символов? Самый простой подход декодирования, вероятно, что-то вроде:

char From6Bit( char c6 ) {
    // array of all 64 characters that appear in your 6-bit set
    static SixBitSet[] = { 'A', 'B', ... }; 
    return SixBitSet[ c6 ];
}   

Сноска. 6-битные наборы символов были довольно популярны на старом оборудовании DEC, некоторые из которых, например, DEC-10, имели 36-битную архитектуру, в которой 6-битные символы имели определенный смысл.

2 голосов
/ 20 апреля 2009

Я не могу представить, почему вы получаете старую версию DIX-10/20 SIXBIT, но если это так, просто добавьте 32 (десятичное число). SIXBIT взял символы ASCII, начиная с пробела (32), поэтому просто добавьте 32 к символу SIXBIT, чтобы получить символ ASCII.

2 голосов
/ 20 апреля 2009

Вы должны рассказать нам, как выглядит ваш 6-битный набор символов, я не думаю, что есть какой-то стандарт.

Самый простой способ сделать обратное отображение, вероятно, состоит в том, чтобы просто использовать таблицу поиска, например так:

static const char sixToSeven[] = { ' ', 'A', 'B', ... };

Предполагается, что пробел закодирован как (двоичный) 000000, заглавная A как 000001 и т. Д.

Вы индексируете в sixToSeven один из ваших 6-битных символов и возвращаете локальный 7-битный символ.

1 голос
/ 20 апреля 2009

Единственный последний известный мне 6-битный код - base64. При этом используются четыре 6-битных печатаемых символа для хранения трех 8-битных значений (6x4 = 8x3 = 24 бита).

6-битные значения взяты из символов:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

, которые являются значениями от 0 до 63. Четыре из них (скажем, UGF4) используются для представления трех 8-битных значений.

UGF4 = 010100 000110 000101 111000
     = 01010000 01100001 01111000
     = Pax

Если именно так закодированы ваши данные, существует множество фрагментов, которые скажут вам, как их декодировать (во многих языках есть встроенный кодер и декодер или встроенная библиотека). У Wikipedia есть хорошая статья для этого здесь .

Если это , а не base64, то вам необходимо выяснить схему кодирования. Некоторые старые схемы использовали другие методы поиска кодов сдвига / сдвига (SI / SO) для выбора страницы в наборах символов, но я думаю, что это было больше для выбора расширенных (например, японских DBCS) символов, а не обычных символов ACSII .

0 голосов
/ 20 апреля 2009

Если бы я дал вам значение одного бита, и я утверждал, что оно взято из Windows XP, вы могли бы восстановить всю ОС?

Ты не можешь. Вы потеряли информацию. Нет никакого способа восстановить это, если у вас нет некоторых знаний о , что было потеряно. Если вы знаете, что, скажем, самый значимый бит был обрезан, вы можете установить его на ноль, и вы правильно восстановили хотя бы половину символов.

Если вы знаете, как 'a' и 'z' представлены в вашей 6-битной кодировке, вы можете догадаться, что было удалено, сравнив их с их 7-битными представлениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...