singlepost

кодировка в 6 бит(С) << На главную или назад  

собственно, сабж таков:
у нас есть char, который весит 8 бит.
допустим, мы хотим создать кодировку, которая занимает 6 бит.
соответственно, массив char'ов надо использовать, используя 2 оставшихся бита или как-то по-другому.
хотя бы идею подкиньте, есть ли какое-то средство языка?

13 ответов в теме “кодировка в 6 бит(С)”

  1. 13
    Дмитрий Москин ответил:

    #12, а может так? :)
    [1 2 3 4 5 6 1 2] [3 4 5 6 1 2 3 4] [5 6 1 2 3 4 5 6]

  2. 12
    Александр Лищенер ответил:

    Жека, смутно… хотя примерно понял.
    наверное, все же лучше и веселее №12, только как создать массив байтов?

  3. 11
    Александр Курганов ответил:

    просто создай массив байтов; а там уже пр помощи функций сдвига битов разбирайся.
    пример:

    байт1
    [1 2 3 4 5 6 1 2][1 2 3 4 5 6 1 2][1 2 3 4 5 6 1 2][1 2 3 4 5 6 лишний лишний]
    2 бита не жалко?

  4. 10
    Жека Кирпичев ответил:

    //www.google.com/codesearch/p?hl=ru#dR3YEbitojA...

    Вот исходник base64 на си. Александр, надеюсь, общая идея будет ясна из него.

  5. 9
    Сергей Переславцев ответил:

    google "std::bitset" + //en.wikipedia.org/wiki/Bit_array

  6. 8
    Леонид Максимов ответил:

    стандарт преобразования бинарных данных в текстовые, которые можно отправить письмом.

  7. 7
    Александр Лищенер ответил:

    если вы имеете ввиду объявление 64-битной переменной, то 64 mod 6 != 0.
    если другое – поясните

  8. 6
    Александр Лищенер ответил:

    Евгений, решение "в лоб", аля
    struct MS
    {
    bool f_b;
    bool s_b;
    bool t_b;
    // etc…
    }
    однозначно не пройдет, понятно…

    Николай, я по-моему четко обозначил задачу. Я же не спросил "Ребят, а надо ли париться об оставшихся двух битах??? 111?"

    Александр, да, надо хранить строки, состоящие из символов, для кодирования которых необходимо и достаточно 6 бит. Надо поддерживать операцию кодирования и декодирования.

    Про битовые поля надо бы почитать, примерно то, что мне нужно – надо только придумать как "склеить" "лишние" биты

  9. 5
    Леонид Максимов ответил:

    а чем не устраивает base64?

  10. 4
    Жека Кирпичев ответил:

    Александр, поясни задачу. Тебе надо хранить строки, состоящие из символов, для кодирования которых достаточно 6 бит? Какие операции надо поддерживать – только перегон в 8-битную кодировку и обратно, или что-то еще?

    Евгений, битовые поля есть во всех компиляторах си, но объектов с размером, не кратным 8 битам, нет ни в одном известном мне популярном компиляторе.

    Николай, необходимости в асме нету.

  11. 3
    Денис Боенсков ответил:

    в С можно создавать структуру с битовыми полями:
    struct TNewType
    {
    char symbol:6;
    unsigned reserved1:1;
    unsigned reserved2:1;
    };

    Размер структуры – 1 байт. 2 бита можно использовать по своему усмотрению.

  12. 2
    Николай Марков ответил:

    используй char, и не парься об оставшихся двух битах, меньше гемороя. или пиши на асме

  13. 1
    Евгений кросовкин ответил:

    мне кажется надо новый тип описывать, это ж компиллер должен выравнивать и память вделять, хотя не уверен что он будет выравнивать по битам. Если это и возможно то нужен компиллер новый

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.