#include <iostream>
#include <vector>
using byte = unsigned char;
std::vector<uint16_t> GetIntArrayFromByteArray(const std::vector<byte>& byteArray)
{
const int inputSize = byteArray.size();
const bool inputIsOddCount = inputSize % 2 != 0;
const int finalSize = (int)(inputSize/2.0 + 0.5);
// Ignore the last odd item in loop and handle it later
const int loopLength = inputIsOddCount ? inputSize - 1 : inputSize;
std::vector<uint16_t> intArray;
// Reserve space for all items
intArray.reserve(finalSize);
for (int i = 0; i < loopLength; i += 2)
{
intArray.push_back((uint16_t)((byteArray[i] << 8) | byteArray[i + 1]));
}
// If the input was odd-count, we still have one byte to add, along with a zero
if(inputIsOddCount)
{
// The zero in this expression is redundant but illustrative
intArray.push_back((uint16_t)((byteArray[inputSize-1] << 8) | 0));
}
return intArray;
}
int main() {
const std::vector<byte> numbers{2,0,0,0,1,0,0,1,4};
const std::vector<uint16_t> result(GetIntArrayFromByteArray(numbers));
for(uint16_t num: result) {
std::cout << num << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgYnl0ZSA9IHVuc2lnbmVkIGNoYXI7CgpzdGQ6OnZlY3Rvcjx1aW50MTZfdD4gR2V0SW50QXJyYXlGcm9tQnl0ZUFycmF5KGNvbnN0IHN0ZDo6dmVjdG9yPGJ5dGU+JiBieXRlQXJyYXkpCnsKICAgIGNvbnN0IGludCBpbnB1dFNpemUgPSBieXRlQXJyYXkuc2l6ZSgpOwogICAgY29uc3QgYm9vbCBpbnB1dElzT2RkQ291bnQgPSBpbnB1dFNpemUgJSAyICE9IDA7CiAgICBjb25zdCBpbnQgZmluYWxTaXplID0gKGludCkoaW5wdXRTaXplLzIuMCArIDAuNSk7CiAgICAvLyBJZ25vcmUgdGhlIGxhc3Qgb2RkIGl0ZW0gaW4gbG9vcCBhbmQgaGFuZGxlIGl0IGxhdGVyCiAgICBjb25zdCBpbnQgbG9vcExlbmd0aCA9IGlucHV0SXNPZGRDb3VudCA/IGlucHV0U2l6ZSAtIDEgOiBpbnB1dFNpemU7CiAgICAKICAgIHN0ZDo6dmVjdG9yPHVpbnQxNl90PiBpbnRBcnJheTsKICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGFsbCBpdGVtcwogICAgaW50QXJyYXkucmVzZXJ2ZShmaW5hbFNpemUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb29wTGVuZ3RoOyBpICs9IDIpIAogICAgewogICAgICBpbnRBcnJheS5wdXNoX2JhY2soKHVpbnQxNl90KSgoYnl0ZUFycmF5W2ldIDw8IDgpIHwgYnl0ZUFycmF5W2kgKyAxXSkpOwogICAgfQoKICAgIC8vIElmIHRoZSBpbnB1dCB3YXMgb2RkLWNvdW50LCB3ZSBzdGlsbCBoYXZlIG9uZSBieXRlIHRvIGFkZCwgYWxvbmcgd2l0aCBhIHplcm8KICAgIGlmKGlucHV0SXNPZGRDb3VudCkgCiAgICB7CiAgICAgIC8vIFRoZSB6ZXJvIGluIHRoaXMgZXhwcmVzc2lvbiBpcyByZWR1bmRhbnQgYnV0IGlsbHVzdHJhdGl2ZQogICAgICBpbnRBcnJheS5wdXNoX2JhY2soKHVpbnQxNl90KSgoYnl0ZUFycmF5W2lucHV0U2l6ZS0xXSA8PCA4KSB8IDApKTsKICAgIH0KICAgIHJldHVybiBpbnRBcnJheTsKfQoKaW50IG1haW4oKSB7Cgljb25zdCBzdGQ6OnZlY3RvcjxieXRlPiBudW1iZXJzezIsMCwwLDAsMSwwLDAsMSw0fTsKCWNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQxNl90PiByZXN1bHQoR2V0SW50QXJyYXlGcm9tQnl0ZUFycmF5KG51bWJlcnMpKTsKCQoJZm9yKHVpbnQxNl90IG51bTogcmVzdWx0KSB7CgkJc3RkOjpjb3V0IDw8IG51bSA8PCAiXG4iOwoJfQoJCglyZXR1cm4gMDsKfQoK