• multibyte degerlerin tersten siralandigi ve cogu cpu'da kullanilan binary represantation.. mesela 1234 diye bir hex sayi hafizada "34,12" olarak siralanir..
  • (bkz: big endian)
  • guliver'in seyahatlerinde yumurtayi kucuk tarafindan kiranlar little endian, buyuk tarafindan kiranlar (tabii duz tarafindan sivri tarafindan diye de geciyo olabilir turkcesinde, hatirlayamadim bi an) big endian'di. zaten bilgisayarlarda da, pek nukteli birinin yazdigi paper'da bu kelimeleri byte ordering'e uyarlayarak kullanmasindan sonra oyle adlandirilmaya baslanmis...
  • little endian bir işlemci kullanıyorsanız, bu makina için yazılan kodlarda networkten alınan paketlere network to host, network'e gönderilen paketlere ise host to network dönüşümlerinden birini uygulamanız gerekir.

    c için kullanabileceğiniz hazır fonksiyonlar:

    (bkz: ntohs)
    (bkz: ntohl)
    (bkz: htons)
    (bkz: htonl)
  • (bkz: lsb)
  • intel x86 mimarili sistemlerde, düşük anlamlı* bit'lerin düşük bellek adresinde, yüksek anlamlı* bit'lerin yüksek bellek adresinde tutulması durumu. aşağı seviyeli* çalışılırken, mikroişlemciye ilişkin endianness durumuna dikkat etmek gerekir. aksi takdirde debug manyağı olmak işten bile değildir. bir de bi-endianness kavramı vardır ki, little endian/big endian çalışma seçeneği sunar. intel, ia-64 mimaride bunu desteklemektedir.

    (bkz: epic)
  • i386 ve devamı olan işlemciler little-endian kullanır.
    elimizde 0x34e2561a 4 byte’lık ınteger verimiz olsun. sağdan itibaren başlanarak 0x1a 0x56 0xe2 0x34 olarak saklanır diyebiliriz.
  • big endian ve little endian kavramlarını anlamak için bilgisayarlardaki hafıza yapılarına biraz hakim olmamız gerekiyor. bilgisayarlarda kullanılanılan hafızaları aslında birer büyük dizi (array) gibi düşünebiliriz. içinde byte'ları bulunduran büyük diziler. bu dizi bölgelerine biz hafıza adresleri diyoruz.
    hafıza adresleri her adreste büyüklüğü bir byte olan bir eleman saklar.
    (bazı konfigürasyonlarda hafıza adreslerinde byte'dan başka şeylerde saklanır mesela nibble ya da bit fakat bunlar oldukça az rastlanan durumlardır bu bakımdan ben bu yazıda bütün hafıza adreslerinde byte saklanıyor olarak farz edeceğim).

    hafızaya word kayıt etmek:

    yazılımla uğraşanların bildiği üzere 1 word 32 bittir yani 4byte. integer, single-precision floating point sayı vb veri tipleri hep 32 bit uzunluğundadır.
    peki biz bu 32 bit uzunluğundaki verileri her biri sadece tek 1 byte tutan 4 byte olmayan hafıza adreslerine nasıl kayıt edeceğiz? cevabı basit 32 bitlik büyüklüğü 4'er byte'a ayıracağız.
    örnek olarak 32 bit hexadecimal olarak 90ab12cd16 gibi değer var elimizde ve bunu hafızaya kayıt etmek istiyoruz. bildiğimiz üzere her hexadecimal basamak 4 bittir. o zaman biz 8 hexadecimal basamakla 32 bitlik bir değeri gösterebiliriz.
    yani bu 4 byte 90,ab,12,cd dir. her byte 2 hex basamaktan oluyor. şimdi bu 4 byte'ı hafızada nasıl kayıt edebiliriz.

    bu kayıt işlemi iki türlü olabilir.

    big endian

    big endian tarzında most significant byte [(bkz: msb)] en küçük hafıza adresine yazılır

    adres byte
    1000 90 (most significant byte)
    1001 ab
    1002 12
    1003 cd

    little endian

    little endian tarzında ise most significant byte [(bkz: msb)] en büyük hafıza adresine yazılır.

    adres byte
    1000 cd
    1001 12
    1002 ab
    1003 90(most significant byte)

    dikkat edilirse big endian ve little endian bir birlerinin tam tersi kayıt methodlarıdır.

    bu kayıt methodları sizin kullandığınız işlemcinin mimarisine göre kullanılırlar.
  • little indian'ın yanlış yazılmışı
  • mantığının anlaşılabilmesi için basitleştirilmiş halini anlatacağım.

    şimdi diyelim ki elimizde bir veri var. mesela 1848 sayısı. biz bu sayıyı bilgisayarın belleğinde tutmak istiyoruz daha sonra kullanabilmek için ama bilgisayarın belleğinin her bloğu 1 rakam tutabiliyor. ne yapacağız? tabii ki 4 blok kullanacağız. her bloğun bir adresi var ve biz sayıyı yazdıktan sonra ilk adresi başka bir yere kaydedeceğiz ki geri döndüğümüzde sayının hangi adreste olduğunu hatırlayalım.

    diyelim ki elimizde 10 11 12 13 adresleri var ve biz bu sayıyı bu 4 bloğa yerleştireceğiz.
    sonra 10 adresini bir yere not edeceğiz ki sayının nerede olduğunu unutmayalım.

    adres -- rakam
    10 -------> 1
    11 -------> 8
    12 -------> 4
    13 -------> 8

    burada görüleceği üzere bize göre en yüksek basamak değerine sahip rakam en düşük adres değerinde. bu şekilde yerleştirmeye big endian deniyor. bunun tam tersi şekilde yerleştirmeye de little endian deniyor. o da şöyle:

    adres -- rakam
    10 -------> 8
    11 -------> 4
    12 -------> 8
    13 -------> 1

    şu anda kullandığınız bilgisayar muhtemelen little endian. eğer assembly'de kod yazıyorsanız little endian biraz kafa karıştırıcı olabiliyor çünkü bu aynı şeye benziyor:

    ub ıyızay kamuko roz (bu yazıyı okumak zor)

    kelimelerin sırası aynı ama harfler tam tersi sırada.

    not: bu entry'de basitlik olsun diye rakam kullanılmıştır bilgisayar ise byte olarak yapar bu işlemleri.
hesabın var mı? giriş yap