سؤال

أنا أعمل مع بيانات الصوت. أود أن ألعب ملف عينة في الاتجاه المعاكس. يتم تخزين البيانات باعتبارها INTS غير موقعة ومزودة لطيفة ومضيقة. هل هناك طريقة للاتصال memcpy التي سوف نسخ في ترتيب عكسي. أي إذا كان لدي 1،2،3،4 المخزنة في صفيف، هل يمكنني الاتصال memcpy و سخريا عكسها حتى أحصل على 4،3،2،1.

هل كانت مفيدة؟

المحلول

هذا يعمل للنسخ intS في الاتجاه المعاكس:

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 :: عكس أو STD :: Truster_Copy.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top