Big Endian, Little Endian va Middle Endian notatsiyalari haqida nima bilasiz?
sobes.tech AI
AIdan javob
Big Endian: ko‘p baytli raqamning eng katta (eng muhim) bayti kamroq manzilga joylashtiriladi, va eng kichik bayt — yuqoriroq manzilga. Little Endian: kamroq muhim bayt kamroq manzilga joylashtiriladi, va eng muhim bayt — yuqoriroq manzilga. Middle Endian: keng tarqalgan yozuv emas. Ba’zan, u Big Endian va Little Endian bilan farq qiladigan holatlarni anglatadi, masalan, 2 baytli bloklar bilan ishlashda.
4 baytli raqam uchun misol 0x12345678:
| Manzil | Big Endian | Little Endian |
|---|---|---|
| 0x1000 | 0x12 | 0x78 |
| 0x1001 | 0x34 | 0x56 |
| 0x1002 | 0x56 | 0x34 |
| 0x1003 | 0x78 | 0x12 |
Ko‘pgina zamonaviy protsessorlar (Intel, AMD) Little Endian ni ishlatadi. Tarmoq protokollari odatda Big Endian ("tarmoq tartibi" deb ham ataladi) ni ishlatadi.
Tizimning endianness ni tekshirish uchun quyidagicha qilish mumkin:
#include <iostream>
int main() {
int x = 1;
// Baytga ko‘rsatkich yaratamiz va 1 ning birinchi baytini tekshiramiz (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 tartibini o‘zgartirish uchun <arpa/inet.h> (tarmoq tartibi uchun) yoki <endian.h> (umumiyroq) sarlavhalaridan foydalaniladi.
#include <arpa/inet.h> // htons, htonl, ntohs, ntohl uchun
int main() {
uint16_t host_short = 0x1234;
uint32_t host_long = 0x12345678;
// Host tartibidan tarmoq tartibiga (Big Endian) o‘tkazish
uint16_t network_short = htons(host_short);
uint32_t network_long = htonl(host_long);
// Tarmoq tartibidan host tartibiga o‘tkazish
uint16_t back_to_host_short = ntohs(network_short);
uint32_t back_to_host_long = ntohl(network_long);
return 0;
}