2012-11-29 2 views
0

나는 reinterpret_cast가 그 일을 할 수도 있다고 생각하지만 데이터 변환을하지 않았다고 생각한다. 루프를 반복해서 하나씩 수행하고 포인터 유형과 데이터 유형 변환을 모두 수행하는 우아한 방법이 있는지 궁금합니다. 감사합니다.C/C++에서 float 포인터를 int 포인터로 변환하는 방법은 무엇입니까?

+2

더 많은 범위가 필요합니다. 그것은 혼자 나쁜 생각처럼 들린다. – chris

+1

'reinterpret_cast'는 확실히 할 수있는 방법이 아닙니다. –

+0

변환 목적은 무엇입니까? –

답변

3

나는 가정하고, 당신이 float의 배열의 첫 번째 요소를 가리키는 일부 float*이 있고 int의 다음로 사용하려는 경우 내가 제안 몇 가지 옵션 :

  1. float을 원하지 않으면 float을 입력하지 마십시오. 우선 int 배열을 저장하십시오.

  2. 마찬가지로, int을 원하지 않으면 float을 사용하도록 코드를 변경하십시오.

  3. float의 배열을 갖고 싶은데 어느 시점에서 필요에 따라 int으로 변환하려는 경우 수행하십시오. static_cast<int>을 사용하여 안전한 방식으로 각 요소에 대한 변환을 수행하십시오. 한 번에 전체 배열을 변환하려는 경우

  4. , 나는 당신과 같이 일을 할 제안 : 당신이 정말로 배열을 고수 할 경우

    float float_array[N] = /* ... */; 
    std::vector<int> ints(float_array, float_array + N); 
    
  5. 또는, std::copy를 사용

    float float_array[N] = /* ... */; 
    int int_array[N]; 
    std::copy(float_array, float_array + N, int_array); 
    

    위의 std::vector이 더 바람직합니다.

+0

위대한 답변! 분명히 3을 사용하고 싶지 않습니다. 내 시나리오는 float 배열을 int 배열로 변환하고이 int 배열을 GPU에로드합니다. 나는 GPU API가 STL 객체를 취할지 확신하지 못하므로 5를해야 할 수도 있습니다. 그러나 STL 벡터를 쉽게 변환하거나 일반 배열로 캐스팅 할 수 있다면 어쩌면 할 수 있습니다. 감사! –

관련 문제