size_t getPayloadLength(const unsigned char *inputFrame){
size_t payloadLength = inputFrame[1] & 0x7F;
if (payloadLength == 0x7E) {
uint16_t payloadLength16b = 0;
memcpy(&payloadLength16b, &inputFrame[2], 2);
payloadLength = payloadLength16b;
} else if (payloadLength == 0x7F) {
uint64_t payloadLength64b = 0;
memcpy(&payloadLength64b, &inputFrame[2], 8);
payloadLength = (size_t)payloadLength64b;
}
return payloadLength;
}
Mais cette méthode lorsque la charge utile est == 126 ou 127 renvoie un mauvais résultat (toujours un nombre énorme) quelqu'un peut repérer l'erreur?Décodage longueur de la charge utile Websocket en C
Je sais que j'ai envoyé un message de 250 caractères. Ce sont les 5 premiers octets I Revive converti en binaire:
[0] 10000001
[1] 11111110 // & 0x7F = 126 -> so payload length is byte 2 3 interpreted as 16 bit
[2] 00000000 //
[3] 11111010 // 0000000011111010 = 250 but my function returns 64000
[4] 10001001
@Gavello: '64000' est' 1111101000000000' en binaire, donc il semble que j'avais raison. – jxh