Sobes.tech
Junior

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