const foo = new Int8Array(2);
foo[0] = 7;
foo[1] = 7;
console.log(new Int16Array(foo.buffer)[0]); // -> 1799Как получить то же самое в С++?
uint8_t foo[] = {7, 7};
int i = foo[0] + 256 * foo[1];В js я могу получить это так
…Int8Array…
foo[0] + 256 * (foo[1]) + foo[2] + 256 * (foo[3]) как будет выглядеть эта формула, если допустим массив будет из 4-х цифр?
foo[0] + 256 * (foo[1] + 256 * (foo[2] + 256 * foo[3]));{foo[0] + 256 * foo[1], foo[2] + 256 * foo[3]};как называется эта конвертация?
foo[0] + 256 * (foo[1] + 256*(foo[2] + 256 * foo[3]))Подскажите как через побитовый сдвиг сделать?
(uint32_t)foo[0] | (uint32_t)foo[1] << 8 | (uint32_t)foo[2] << 16 | (uint32_t)foo[3] << 24(uint32_t)foo[0] | ((uint32_t)foo[1] | ((uint32_t)foo[2] | (uint32_t)foo[3] << 8) << 8) << 8Массив int8_t, а не uint8_t
uint8_t foo[] = {7, 7};
int i = ((foo[0] + 256 * foo[1]) ^ 0x8000) - 0x8000; vector<int8_t> foo = {-125, 5};
int i = ((foo[0] + 256 * foo[1]) ^ 0x8000) - 0x8000;
cout << i << endl; // -> 1155const foo = new Int8Array(2);
foo[0] = -125;
foo[1] = 5;
console.log(new Int32Array(foo.buffer)[0]); // -> 1411а что не так?
*(int*)foo.data() извлекает примерно 32 бита. Ну и там дальше ещё пара пунктов по мелочи, типа отсутствия гарантии выравнивания, зависимости от порядка байт используемой платформы, опять же беззнаковость извлечённого числа.