Big Endian, Little Endian və Middle Endian notasiya haqqında nə bilirsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Big Endian: çoxbaytlı bir ədədin ən əhəmiyyətli (ən böyük) baytı ən aşağı yaddaş ünvanına yerləşdirilir və ən az əhəmiyyətli bayt ən yüksək ünvanına. Little Endian: çoxbaytlı bir ədədin ən az əhəmiyyətli baytı ən aşağı yaddaş ünvanına yerləşdirilir və ən əhəmiyyətli bayt ən yüksək ünvanına. Middle Endian: geniş qəbul olunmuş bir notasiya deyil. Bəzən, bu, baytların sırasının Big Endian və Little Endian-dən fərqli olduğu hallara işarə edir, məsələn, çoxbaytlı ədədlərin 2 baytlıq bloklar şəklində işlənməsi zamanı.
4 baytlıq 0x12345678 ədədi üçün nümunə:
| Ünvan | Big Endian | Little Endian |
|---|---|---|
| 0x1000 | 0x12 | 0x78 |
| 0x1001 | 0x34 | 0x56 |
| 0x1002 | 0x56 | 0x34 |
| 0x1003 | 0x78 | 0x12 |
Ən çox müasir prosessorlar (Intel, AMD) Little Endian istifadə edir. Şəbəkə protokolları, ümumiyyətlə, Big Endian istifadə edir ("şəbəkə ardıcıllığı" adlanır).
Sistem endianness-ni yoxlamaq üçün aşağıdakı kimi edilə bilər:
#include <iostream>
int main() {
int x = 1;
// Bayt göstəricisi yaradın və 1-in ilk baytına baxın (0x00000001)
if (*reinterpret_cast<char*>(&x) == 1) {
std::cout << "Little Endian" << std::endl;
} else {
std::cout << "Big Endian" << std::endl;
}
return 0;
}
C++-da bayt ardıcıllığını çevirmək üçün <arpa/inet.h> (şəbəkə ardıcıllığı üçün) və ya <endian.h> (ümumi) başlıqlarındakı funksiyalar istifadə olunur.
#include <arpa/inet.h> // htons, htonl, ntohs, ntohl
int main() {
uint16_t host_short = 0x1234;
uint32_t host_long = 0x12345678;
// Host ardıcıllığından şəbəkə ardıcıllığına (Big Endian) çevrilmə
uint16_t network_short = htons(host_short);
uint32_t network_long = htonl(host_long);
// Şəbəkə ardıcıllığından host ardıcıllığına çevrilmə
uint16_t back_to_host_short = ntohs(network_short);
uint32_t back_to_host_long = ntohl(network_long);
return 0;
}