Mida teate Big Endian, Little Endian ja Middle Endian märksõnadest?
sobes.tech AI
Vastus AI-lt
Suur Endian: suurem bait on mitmekomaga numbri salvestatud väiksemas mäluaadressis, samas väiksem bait — suuremas. Väikese Endian: väiksem bait on mitmekomaga numbri salvestatud väiksemas mäluaadressis, samas suurem bait — suuremas. Keskmise Endian: ei ole üldtunnustatud märgistus. Mõnikord mõistetakse seda olukordades, kus baitide järjekord erineb BigEndian ja LittleEndian, näiteks kui mitmekomaga numbrid töödeldakse 2 baiti plokkidena.
Näide 4 baiti numbrile 0x12345678:
| Aadress | Big Endian | Little Endian |
|---|---|---|
| 0x1000 | 0x12 | 0x78 |
| 0x1001 | 0x34 | 0x56 |
| 0x1002 | 0x56 | 0x34 |
| 0x1003 | 0x78 | 0x12 |
Enamik kaasaegseid protsessoreid (Intel, AMD) kasutavad Little Endian-i. Võrgu protokollid kasutavad tavaliselt Big Endian-i (nimetatakse ka "võrgu baitide järjekorraks"). Süsteemi endianness'i saab kontrollida järgmiselt:
#include <iostream>
int peamine() {
int x = 1;
// Loome baitide näitaja ja vaatame esimese baitide väärtust (0x00000001)
if (*reinterpret_cast<char*>(&x) == 1) {
std::cout << "Little Endian" << std::endl;
} else {
std::cout << "Big Endian" << std::endl;
}
return 0;
}
Baitide järjekorra muutmine C++-s toimub <arpa/inet.h> (võrgu järjekord) või <endian.h> (üldisemate) funktsioonide abil.
#include <arpa/inet.h> // For htons, htonl, ntohs, ntohl
int peamine() {
uint16_t host_short = 0x1234;
uint32_t host_long = 0x12345678;
// Muundamine hosti järjekorrast võrgu (Big Endian)
uint16_t network_short = htons(host_short);
uint32_t network_long = htonl(host_long);
// Muundamine võrgust (Big Endian) hosti järjekorda
uint16_t tagasi host_short = ntohs(network_short);
uint32_t tagasi host_long = ntohl(network_long);
return 0;
}