Python Uzun bir binary data icerisinden değişken bit uzunluğundaki parçaları almak

Katılım
26 Ocak 2020
Mesajlar
6.332
Makaleler
1
Çözümler
13
Yer
İstanbul
Elimde bir bytes objesi var. Icinde milyon tane byte var ve ben bunlarin içinden sırasıyla farkli bit sayilarinda parçaları almak istiyorum. 9, 10, 11 gibi. Aklıma ilk gelen şey tum byteları devasa bir integere cevirmek ve sonra bir mask yapip bitwise operasyonlar ile veri almak oldu. Python'da integer boyutu RAM ile kısıtlı oldugundan bu yaklaşım ise yarıyor.

Fakat dedigim gibi milyonlarca byte oldugu zaman en bastaki 9 biti almak için milyonlarca defa shifting yapmak gerekiyor ise yarayan bir mask elde etmek için ve bu bana cok verimli bir cozum gibi gelmedi.

Bunu yapmanin en verimli yolu nedir sizce? Herhangi bir import kullanmadan.
 
Sirasiyla farkli parcalar derken bir oncekinden farkli olan mi ? 1,2,1,2,1,2,1,2... seklinde tekrarliysa mesela output ne olmali?
Farkli parcalar derken 8 bit olmayacak her zaman anlaminda dedim.

Salliyorum elimde 100 bit var. Return list şu şekilde olacak.

Ilk 8 bit,
Sonraki 9 bit,
Sonraki 9 bit
..
..
Sonraki 10 bit

Gibi.

Ama 8den başlamak zorunda değil 1er 1er artmak zorunda da değil.
 
Hala bir probleminiz var mı? Ona göre yanıt vermek isterim😅

İçimde kalmasın yine yazayım. Veriyi sürekli olarak bir "for" döngüsü ile bir diğer bytes objesine atıp, bytes objesinin uzunluğu seçilen rastgele sayı ile eşit ise bu obje bir list ya da array'e kaydedilir ve bunu veri bitene kadar tekrarlar.

Python:
import random

data = [0, 0, 1, 0, 1, 1, 0, 1, 0, 1]
kayitli_listeler = []
anlik_liste = []
uzunluk = random.randint(1, 3)

for i in data:
    anlik_liste.append(i)
    if len(anlik_liste) == uzunluk:
        kayitli_listeler.append(anlik_liste)
        # Döngü için temizleme işlemi
        anlik_liste = []
        uzunluk = random.randint(1, 3)
print(kayitli_listeler)

Biraz amatörce bir düşünce yapısı ama olsun. Yani burada anlik_liste'yi RAM gibi kullanıp belleğimiz olan kayitli_listeler'e ekliyoruz. Bu arada bu gibi bir işlem her türlü çok veri harcayabilir ve Python çok yavaş bir dil olduğu için C/C++ gibi bir dille yazmanızı öneririm.

Sorununuzu çözmüş olsanız bile benim içimde kalmamış oldu. :D
 
Son düzenleme:

Technopat Haberler

Geri
Yukarı