Örnek 1 - byte pointer
Şöyle yaparız. Little Endian da yazmaya soldan başlayacağımız için ilk byte'a 1 yazılır. char'a cast edince de ilk byte 1 olarak gelir.
Şöyle yaparız.
Ya da şöyle bulunabilir. Big Endian da yazmaya sağdan başladığımız için ilk byte'a 0x01 yazılır. char'a cast edince de ilk byte 1 olarak gelir.
Şöyle yaparız
byte pointer yöntemine benziyor. Şöyle yaparız
Şöyle yaparız. Little Endian da yazmaya soldan başlayacağımız için ilk byte'a 1 yazılır. char'a cast edince de ilk byte 1 olarak gelir.
bool IsLittleEndian(){
int a = 1;
char* ptr = (char*)&a;
return *ptr;
}
Örnek 2 - byte pointerŞöyle yaparız.
int i = 7;
char* p = reinterpret_cast<char*>(&i);
if(p[0] == '\x7')
std::cout << "This system is little-endian\n";
else
std::cout << "This system is big-endian\n";
Çalışma şekli şudur.Big endian:
+-----+-----+-----+-----+
| 0 | 0 | 0 | 7 |
+-----+-----+-----+-----+
^ pointer to int points here
Little endian:
+-----+-----+-----+-----+
| 7 | 0 | 0 | 0 |
+-----+-----+-----+-----+
^ pointer to int points here
Örnek 3 - byte pointerYa da şöyle bulunabilir. Big Endian da yazmaya sağdan başladığımız için ilk byte'a 0x01 yazılır. char'a cast edince de ilk byte 1 olarak gelir.
long test = 0x01020304;
char* ptr = (char*)&test;
int isSystemBigEndian = (ptr[0] == 0x01);
Örnek 4 - htonsŞöyle yaparız
#include <stdio.h>
#include <arpa/inet.h>
int main(int argc, char *argv[]) {
uint16_t num = 123;
if (htons(num) == num) {
printf("big endian\n");
} else {
printf("little endian\n");
}
}
Örnek 5 - unionbyte pointer yöntemine benziyor. Şöyle yaparız
#include <stdio.h>
#include <stdint.h>
union echeck {
uint32_t i;
char c[4];
} echeck = { .c = { 0x01, 0x02, 0x03, 0x04 } };
int main()
{
if (echeck.i == 0x01020304) {
printf("big endian\n");
} else if (echeck.i == 0x04030201) {
printf("little endian\n");
} else if (echeck.i == 0x02010403) {
printf("pdp endian\n");
} else {
printf("other endian\n");
}
return 0;
}
Hiç yorum yok:
Yorum Gönder