Предполагая, что вы пишете анализатор WebSocket, вам нужно будет проверить MSB (старший значащий бит) индикатора длины (байтовый индекс 1 в буфере с нулевым индексом).
Это указывается в RFC в бите 8 (при условии порядка байтов в сети).
Я написал синтаксический анализатор C WebSockets для платформы facil.io . Глядя на то, как длина и маскировка являются ручками, может помочь. Это в значительной степени составляет:
uint8_t has_mask = (((uint8_t *)bytes)[1] >> 7) & 1;
Вы можете заметить индикатор маскирования собирается из 8-го бита (MSB) второго байта в буфере .
Сама маска всегда является первыми 4 байтами в полезной нагрузке (хотя, технически, они не являются частью полезной нагрузки). i.e.:
uint8_t mask_len = has_mask * 4; // == has_mask << 2
Следующим шагом будет XOR для остальной части полезной нагрузки с маской, если она там есть.
Удачи!