Ses verileriyle çalışıyorum. Örnek dosyayı tersten çalmak isterim. Veriler imzasız olarak depolanır ve iyi ve sıkı paketlenir. Ters sırayla kopyalanacak memcpy
aramak için bir yolu var mı. Yani bir dizide 1,2,3,4 saklanmış olsaydım, memcpy
ve sihirli onları geri çevirebilirim, böylece 4,3,2,1 elde ederim.C memcpy ters yönde
cevap
Bu tersten int
s kopyalamak için çalışır:
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];
}
Sadece memcpy()
gibi bölgeler sivri-to örtüşmemelidir dst
tarafından ve src
.
sen yerinde tersine çevirmek istiyorsanız
: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;
}
}
Her iki fonksiyon yukarıda taşınabilir. Donanımı özel kod kullanarak daha hızlı yapabilirsiniz.
(ı doğruluğundan kodu test etmedim.)
Memnuniyetle karşılaştırıldığında bunun etkinliği nedir? –
'memcpy', O (n) olmalıdır ve bu' reverse_memcpy' işlevi olmalıdır. – dreamlax
Hızlı testimde, -O3' optimizasyonu ile, reverse_memcpy() ', 1000000 bayt kopyalamak için memcpy()' den 3 kat daha yavaştır. 1000000 byte ile 10000 yineleme için, memcpy() '4 saniye sürdü ve' reverse_memcpy() '11 aldı. Ama bu rakamlar çok özel bir durum için, bu yüzden kendiniz için şeyler test etmek isteyebilirsiniz. Tabi ki, rüyaların söylediği gibi, ikisi de O (n). –
Hayır, memcpy bunu geriye doğru yapmayacaktır. C'de çalışıyorsanız, bunu yapmak için bir işlev yazın. Gerçekten C++ 'da çalışıyorsanız std :: reverse veya std :: reverse_copy kullanın.
Bunun eski olduğunu biliyorum, ancak bunu yapan bir işlev örneği gönderir misiniz? Bu basit, ama birine yardımcı olabilir. –
- 1. C++ memcpy to char * from c_str
- 2. C imzasız char dizilimi olan memcpy sorunları
- 3. Ters görüntü, matplotlib'de görüntülenen görüntüyü ters çevirir
- 4. copy_to_user vs memcpy
- 5. memcpy ve işaretçiler
- 6. Yatay yönde XPS'de WPF
- 7. Mono - Dikey yönde
- 8. Memcpy ve realloc için hangi başlığı eklemeliyim?
- 9. memcpy kendi kendine kopyalama kopyalama
- 10. C# Ters sırayla hashtable ile yineleyin
- 11. Kaldır ters eğik çizgi ('\') amaç-c
- 12. Bağlantılılar Listesi Ters İşlevi OOP C++
- 13. Yalnızca bir yönde sabit konum
- 14. Arapça karakterler soldan sağa yönde nasıl yazdırılır
- 15. Neden ters dizesi yazdırılıyor?
- 16. Neden str (ters çevrilmiş (...)) ters çevrilmiş dizeyi vermiyor?
- 17. Ters fonksiyon
- 18. Ters argümanlar()
- 19. Ters sıralama
- 20. ters htmlspecialchars
- 21. ters renkler()
- 22. Powershell'de ters eğiklikler
- 23. Animasyonlu geçiş yatay yönde düzgün çalışmaz
- 24. her iki yönde de animate kaydırması
- 25. Sadece dikey yönde bir bitmap'i eğme
- 26. Viewpage belirli bir yönde kaydırmayı durdurma
- 27. AVPlayerViewController kullanarak ekranı yatay yönde nasıl döndürürün?
- 28. Primefaces TreeNode, Kök Düğümünü Dikey yönde gösterir
- 29. Tablodaki ters kopyaları nasıl silebilirim
- 30. ters ölçek renk gradyanı mı?
C böyle bir işlevi yoktur, ancak bir yazmak çok kolaydır. –
Siparişi değiştirmekten ziyade veri üzerinde * yinelemeyi değiştirmeyi düşünmeye değer olabilirdim, daha verimli olacağından şüpheliyim ... –
Bana * büyülü * ile boğulmuş oldun. –