Я посылаю несколько необработанных байтов по сети в C (используя HTTP). В настоящее время я делаю это так:
// response is a large buffer
int n = 0; // response length
int x = 42; // want client to read x
int y = 43; // and y
// write a simple HTTP response containing a 200 status code then x and y in binary format
strcpy(response, "HTTP/1.1 200\r\n\r\n");
n += 16; // status line we just wrote is 16 bytes long
memcpy(response + n, &x, sizeof(x));
n += sizeof(x);
memcpy(response + n, &y, sizeof(y));
n += sizeof(y);
write(client, response, n);
В JavaScript я затем читаю эти данные, используя такой код:
request = new XMLHttpRequest();
request.responseType = "arraybuffer";
request.open("GET", "/test");
request.onreadystatechange = function() { if (this.readyState === XMLHttpRequest.DONE) { console.log(new Int32Array(this.response)) } }
request.send();
, который печатает [42, 43]
как следует .
Мне интересно, есть ли более элегантный способ сделать это на стороне сервера, например,
n += sprintf(response, "HTTP/1.1 200\r\n\r\n%4b%4b", &x, &y);
Где %4b
- это спецификатор выдуманного формата, который просто говорит: скопируйте 4 байта с этого адреса в строку (которая будет "* \ 0 \ 0 \ 0"). Есть ли спецификатор формата, такой как вымышленный %4b
, который делает что-то подобное?