Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C][C++]Big/Litlle endian jak sprawdzić ??

Ostatnio zmodyfikowano 2017-02-16 20:32
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
[C][C++]Big/Litlle endian jak sprawdzić ??
» 2017-02-16 19:32:20
Witam, mam pytanie co do endianów, jak sprawdzić endianowość na danym sprzęcie ?? czy ta funkcja zwróci prawidłowy wynik???
proszę o pomoc.
C/C++
void ByteOrderTest() {
    volatile short int x = 0x1234; //reprezentacja bitowa : 1001000110100, hexowo 0x1234
   
    if( x & 0x01 )
         cout << "litlle endian";
    else
    cout << "big endian; 
   
}

P-157844
jankowalski25
» 2017-02-16 20:02:14
[StackOverflow] How to check whether a system is big endian or little endian?

C/C++
if( x & 0x01 )
     cout << "litlle endian";
else
cout << "big endian;
Nie. W obu przypadkach dostaniesz ten sam wynik. Zresztą, nawet gdyby to mogło tak działać, to:
0x1234   0x12 0x34   0001 0010 0011 0100
         0x34 0x12   0011 0100 0001 0010
P-157845
pekfos
» 2017-02-16 20:03:58
czy ta funkcja zwróci prawidłowy wynik???
Twoja funkcja nie ma żadnego sensu.
P-157846
aaadam
Temat założony przez niniejszego użytkownika
» 2017-02-16 20:06:16
dziękuję <3
C/C++
union {
    int i;
    char c[ sizeof( int ) ];
} x;
x.i = 1;
if( x.c[ 0 ] == 1 )
     printf( "little-endian\n" );
else printf( "big-endian\n" );

może ktoś wyjaśnić dlaczego to niby zadziała ???
P-157847
jankowalski25
» 2017-02-16 20:17:15
A czego konkretnie nie rozumiesz? Unii?
» Kurs C++Unia w C++ lekcja

1. Tworzysz unię, w której umieszczasz liczbę całkowitą oraz tablicę znaków.
2. Zapisujesz wartość
1
 do unii. W pamięci wygląda to tak:
sizeof( int )
"big-endian\n"
"little-endian\n"
2
00 01
01 00
4
00 00 00 01
01 00 00 00
8
00 00 00 00 00 00 00 01
01 00 00 00 00 00 00 00
I teraz sobie odczytujesz pierwszy znak. Rozumiesz?
P-157849
aaadam
Temat założony przez niniejszego użytkownika
» 2017-02-16 20:32:29
tak, dzięki wielkie :)
P-157850
« 1 »
  Strona 1 z 1