Битовые сдвиги, нужна помощь

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fire64, 5 Apr 2014.

  1. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    Есть такая структура:
    PHP:
    // TS packet: 188 bytes, 4 bytes header, 184 bytes payload
    struct video_head {
        
    uint32_t startcode:32;
        
    uint32_t hSize:13;
        
    uint32_t vSize:13;
        ...
    };

    Проблема в том, что там обратный порядок битов.

    т.е. я не могу просто взять и вывести:
    PHP:
    video_head *pTest buff;
    printf"Test: %d\n"pTest->hSize );
    Приходится использовать:
    PHP:
    unsigned short hSize = (buff[i+2] << buff[i+3]) & 0x1fff;
    Вопрос в том, как поменять порядок битов для vSize, чтобы тоже был верный результат.
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Вот и используй преобразование. Задать для структуры какой-то "особый" порядок битов нельзя. Даже если какие-то компиляторы это позволяют, то эти возможности не стандартизированы и не будут работать в других компиляторах.
     
    _________________________