Mp3, ID3v1, ID3v2 derken bit işlemlerine iyice bulaştıktan sonra birazda .Net çatısında bulunan BinaryReader (http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx) sınıfından etkilenerek BitOkuyucu adında bir sınıf hazırlamayı denedim.
Sınıfın amacı bit işlemlerini biraz daha üst düzeyde gerçekleştirmemizi sağlamak ancak bilgi ve tecrübem çok yeterli değil. Yinede neden olmasın dedim ve denemeye karar verdim. Sonuçta ortaya şöyle bir sınıf çıktı
class BitOku
{
public this()
{
//
}
public static bool[] CevirBool(byte byteDegeri)
{
int sayi = cast(int)byteDegeri;
bool[] dizi = new bool[8];
for (int i = 0; i < 8; ++i)
{
if ((sayi & (1 << 7 - i)) != 0)
{
dizi[i] = true;
}
}
return dizi;
}
unittest
{
bool[8] testDizi = [0, 0, 1, 1, 1, 0, 0, 0];
assert(CevirBool(0b_00111000) == testDizi, "Sorun var!");
}
}
Henüz sınıfımızın tek bir metodu var. Onun görevi ise kendisine gönderilen byte değerini bir (1) ve sıfırlardan (0) oluşan bir bool[] dizisi olarak geriye vermek.
Belki biraz garip gelecek, yaptım ama tam olarak anlamadığım şu kısım var.
if ((sayi & (1 << 7 - i)) != 0)
Burada sola kaydırmayı tam olarak anlamadım. Yani direk (sayi & i) gibi bir yazımla "ve" işlemini neden yapamıyorum? Sanırım buradaki mantığı tam anlayamadım.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]