Hallo Leute!
Ich bin gerade auf eine Sache gestoßen, die ich mir nicht so recht erklären kann. Ich habe folgendes Programm:
Wie man sehen kann habe ich eine 64 Bit Variable welche ich mit Werten von 0-255 fülle und diese dann um 8 Bit shifte. Wenn ich das richtig verstehe, werden die werte nach links geshiftet. Diese 64 Bit Variable kann ich aber auch als ein Array von 8 Bit werten verstehen. Nun die Frage: Warum werden die Werte in umgekehrter Reihenfolge ausgegeben, wenn ich die Variable caste? Meine Vermutung war, dass der Speicher dann rückwärts ausgelesen wird aber das kann nicht sein, denn die Adressen sind aufsteigend, wie auch beim normalen Array.
Wer kann diese Knobelei lösen?
MfG
Ich bin gerade auf eine Sache gestoßen, die ich mir nicht so recht erklären kann. Ich habe folgendes Programm:
Code:
unsigned char mask = 255;
unsigned char ucArr[8];
unsigned char* ucPtr1;
unsigned __int64 ui64;
for(int i=0; i<8; i++)
{
unsigned char val = rand() % 256;
ui64 = (ui64 << 8) | (val);
ucArr[i] = val;
}
ucPtr1 = (unsigned char*)(&ui64);
//PRINT VALUES
for(int i=0; i<8; i++)
{
unsigned char cVal = (ui64 >> (7-i)*8) & mask;
cout << (int)cVal << " | " << (int)ucArr[i] << " | " << (int)ucPtr1[i] << endl;
}
//PRINT ADRESSEN
for(int i=0; i<8; i++)
{
cout << (void*)&ucArr[i] << " | " << (void*)&ucPtr1[i] << endl;
}
return 0;
Wie man sehen kann habe ich eine 64 Bit Variable welche ich mit Werten von 0-255 fülle und diese dann um 8 Bit shifte. Wenn ich das richtig verstehe, werden die werte nach links geshiftet. Diese 64 Bit Variable kann ich aber auch als ein Array von 8 Bit werten verstehen. Nun die Frage: Warum werden die Werte in umgekehrter Reihenfolge ausgegeben, wenn ich die Variable caste? Meine Vermutung war, dass der Speicher dann rückwärts ausgelesen wird aber das kann nicht sein, denn die Adressen sind aufsteigend, wie auch beim normalen Array.
Wer kann diese Knobelei lösen?
MfG