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;
}