Как преобразовать массив int в массив int16_t в C++ или C с низкой стоимостью? Предположим, что все значения в массиве int находятся внутри диапазона int16_t.C++ преобразовать массив int в массив int16_t
Я знаю два варианта:
i. Используйте для цикла, чтобы назначить каждый элемент в массиве int соответствующему элементу в массиве int16_t.
int *a = new int[2];
a[0] = 1;
a[1] = 2;
int16_t *b = new int16_t[2];
for (int i = 0; i < 2; i++) {
b[i] = a[i];
}
Но ему нужно сделать копию и накладные расходы.
ii. Использование литого
int16_t* c = reinterpret_cast<int16_t*>(a);
//1 0 2 0
for (int i = 0; i < 4; i++) {
cout << (int)r[i] << endl;
}
Но я не хочу, чтобы те 0.
Есть ли другой способ недорогой передачи Int массива [2], чтобы int16_t массива [2] и сохранить значение?
На современных архитектурах есть большая вероятность, что вы собираетесь усекать ценности. «Int» больше 32-битные или 64-битные (не гарантированные, но, как правило, так), и «int16_t» гарантированно будет 16 бит.Повторная интерпретация указателя не будет тем, что вы хотите, так как вы по существу превращаете 'int' в ** two **' int16_t', предполагая, что 'int' - 32 бита в вашей системе. – Qix
Кроме того, поскольку вы вырезаете ints, вы можете получить неожиданные результаты по архитектуре с большими концами во втором, reinterpret_cast примере –
Да. Но я получаю массив int из других компонентов, хотя я знаю, что значения гарантированно находятся в пределах 16-битного целого числа (int16_t). Таким образом, [i] не будет усечен, если я сделаю b [i] = (int16_t) a [i]. –