int 배열을 int16_t 배열로 C++ 또는 C로 저렴한 비용으로 변환하려면 어떻게해야합니까? int 배열의 모든 값이 int16_t 범위 내에 있다고 가정합니다.C++ int 배열을 int16_t 배열로 변환
I :
나는 두 가지 옵션을 알고있다. for 루프를 사용하여 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;
}
캐스팅하지만 배열을 int16_t하는 int 배열 [2]를 전송하는 다른 저가의 방법이 있나요 그 0
싶지 않아 [2] 값을 유지?
현대 아키텍처에는 가치를 버릴 가능성이 높습니다. 'int '는 더 이상 32 비트 또는 64 비트 (보장되지는 않지만 일반적으로 그렇게)이고'int16_t'는 16 비트로 보장됩니다.'int'가 시스템에서 32 비트라고 가정 할 때'int'를 ** two **'int16_t'로 근본적으로 바꾸고 있기 때문에 포인터의 재 해석은 여러분이 원하는대로되지 않을 것입니다. – Qix
또한 int를 조각 한 이후로 두 번째 엔 큰 엔디안 아키텍처에서 놀라운 결과를 얻을 수 있습니다. reinterpret_cast 예제 –
예. 그러나 값이 16 비트 정수 (int16_t)의 범위 내에 있음을 알고 있지만 다른 구성 요소에서 int 배열을받습니다. 따라서 [b] [i] = (int16_t) a [i]를 수행하면 [i]는 잘리지 않습니다. –