문제

오디오 데이터로 작업하고 있습니다. 샘플 파일을 반대로 재생하고 싶습니다. 데이터는 서명되지 않은 INT로 저장되며 멋지고 빡빡합니다. 전화하는 방법이 있습니까? memcpy 그것은 역 순서로 복사됩니다. 즉, 1,2,3,4가 배열에 저장된 경우 전화 할 수 있습니까? memcpy 그리고 마술처럼 4,3,2,1을 얻으십시오.

도움이 되었습니까?

해결책

이것은 복사에 적용됩니다 int반대로 :

void reverse_intcpy(int *restrict dst, const int *restrict src, size_t n)
{
    size_t i;

    for (i=0; i < n; ++i)
        dst[n-1-i] = src[i];

}

처럼 memcpy(), 지역은 지적했다 dst 그리고 src 겹쳐서는 안됩니다.

현장에서 역전하려면 :

void reverse_ints(int *data, size_t n)
{
    size_t i;

    for (i=0; i < n/2; ++i) {
        int tmp = data[i];
        data[i] = data[n - 1 - i];
        data[n - 1 - i] = tmp;
    }
}

위의 기능은 휴대용입니다. 하드웨어 별 코드를 사용하여 더 빠르게 만들 수 있습니다.

(정확성을 위해 코드를 테스트하지 않았습니다.)

다른 팁

아니요, Memcpy는 그렇게 거꾸로하지 않습니다. C에서 작업하는 경우 기능을 작성하십시오. C ++에서 실제로 작업하는 경우 std :: Reverse 또는 std :: reverse_copy를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top