Задать вопрос
  • Как поменять ник на Хабре?

    pragmatik
    @pragmatik Куратор тега Хабр
    Для смены ника на Хабре достаточно отправить соответствующий запрос в форму обратной связи.
    Новый username должен содержать не менее 3 символов (буквы латинского алфавита или цифры). Помимо цифр и букв латинского алфавита username может содержать символ подчеркивания или дефис, но не может начинаться или заканчиваться такими символами, не может содержать символы «.» (точка) или « » (пробел) и не должен быть занят другим пользователем (вне зависимости от того, когда этот пользователь последний раз посещал Хабр).
    Ответ написан
    Комментировать
  • Little endian to Big endian conversion в C++, необходим ли для бинарной сериализации?

    @xandox
    В posix системах (в винде проверить не могу, но скорее всего то же где-то должно быть) есть семейство функций для работы с big endian и little endian.

    По поводу твоего вопроса я бы сделал примерно так
    unsigned short store(unsigned short s) { return htobe16(s); }
    unsigned int store(unsigned int s) { return htobe32(s); }
    unsinged long store(unsigned long s) { if (sizeof(unsinged long) == 8) return htobe64(s); else return htobe32(s);}
    
    unsigned short restore(unsinged short s) { return be16toh(s); }
    // и т.д.


    ну тут как видишь тебе придется еще решить вопрос с unsinged long. он, в зависимости, от битности системы имеет разный размер.

    PS. На самом деле big endian встречается сейчас только на встраиваемых системах и на игровых консолях и вообще говоря зависит не от ОС, а от процессора. На x86 и amd64 всегда little endian. По сему подумай - а надо ли тебе это.
    Ответ написан
    6 комментариев
  • Как исправить "Выражение должно иметь константное значение"?

    @res2001
    Developer, ex-admin
    То как вы используете массив называется VLA (Variable Length Array). Появилось только в стандарте С99. В С++ его нет в принципе.
    Чтоб использовать VLA нужно компилятору явно задать используемый стандарт. Для gcc: -std=c99 или -std=c11. C11 - стандарт 2011 года.
    Если вы используете компилятор от микрософт (в составе MSVS например), то могу вас опечалить - микрософт никогда не стремилась поддерживать стандарты Си. Поддержки VLA там нет и вряд ли будет в ближайшее время.

    Но вообще не рекомендуется использовать VLA без четкого понимания что это, как работает и к каким последствиям может привести. Например, в свое время в ядре линукс была целая компания по выкорчевыванию кода с VLA. Так что лучше воспользуйтесь динамическими массивами или статическими с константными размерностями.
    Ответ написан
    2 комментария