Sobes.tech
Junior

Big Endian, Little Endian ve Middle Endian notasyonları hakkında ne biliyorsunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Big Endian: Çok baytlı bir sayının en anlamlı baytı, bellek adresinin en düşük konumuna yerleştirilir ve en az anlamlı bayt en yüksek konuma yerleştirilir. Little Endian: Çok baytlı bir sayının en az anlamlı baytı, bellek adresinin en düşük konumuna yerleştirilir ve en anlamlı bayt en yüksek konuma yerleştirilir. Middle Endian: yaygın kabul gören bir gösterim değildir. Bazen, bayt sırasının Big Endian ve Little Endian'den farklı olduğu durumlar anlamına gelir, örneğin, çok baytlı sayıları 2 baytlık bloklar halinde işlerken.

4 baytlık 0x12345678 sayısı için örnek:

Adres Big Endian Little Endian
0x1000 0x12 0x78
0x1001 0x34 0x56
0x1002 0x56 0x34
0x1003 0x78 0x12

Çoğu modern işlemci (Intel, AMD) Little Endian kullanır. Ağ protokolleri genellikle Big Endian kullanır ("ağ sırası" olarak da bilinir).

Sistemin endianness'ini kontrol etmek için şu şekilde yapılabilir:

#include <iostream>

int main() {
    int x = 1;
    // Bir bayt gösterici oluştur ve 1 sayısının ilk baytını kontrol et (0x00000001)
    if (*reinterpret_cast<char*>(&x) == 1) {
        std::cout << "Little Endian" << std::endl;
    } else {
        std::cout << "Big Endian" << std::endl;
    }
    return 0;
}

C++'ta bayt sıralamaları arasında dönüşüm için <arpa/inet.h> (ağ sırası için) veya <endian.h> (daha genel) başlıklarındaki fonksiyonlar kullanılır.

#include <arpa/inet.h> // htons, htonl, ntohs, ntohl için

int main() {
    uint16_t host_short = 0x1234;
    uint32_t host_long = 0x12345678;

    // Host sırasından ağ sırasına (Big Endian) dönüşüm
    uint16_t network_short = htons(host_short);
    uint32_t network_long = htonl(host_long);

    // Ağ sırasından host sırasına dönüşüm
    uint16_t back_to_host_short = ntohs(network_short);
    uint32_t back_to_host_long = ntohl(network_long);

    return 0;
}