Ich versuche, eine Zahl, die 16 Ziffern lang ist 0x1122334455667788 und Bit verschiebt es für kleine Endian Nummerierung zu berücksichtigen.Uint64_t in C fungiert als ein uint32_t
den folgenden Beispielcode verwenden, die Anzahl in von Speicherzellen zu laden
void endianCompute(memory_t memory, uint64_t start, uint64_t *save, int size){
*save = 0;
for(int i = 0; i < size; i++){
*save += memory[start + i] << (i)*8;
printf("add 0x%x\n", memory[start + i] << (i)*8);
printf("save 0x%x\n", *save);
}
}
Der Ausgang gibt:
save 0x88
add 0x7700
save 0x7788
add 0x660000
save 0x667788
add 0x55000000
save 0x55667788
add 0x44
save 0x556677cc
add 0x3300
save 0x5566aacc
add 0x220000
save 0x5588aacc
add 0x11000000
save 0x6688aacc
Das macht Sinn für mich, bis das Add 0x44, warum das Bit tut Shift nicht weiter die Zahlen nach links schieben? Warum kann ich keine Zahl hinter 8 Ziffern setzen?
was ist 'memory_t'? Außerdem wird Ihre 'save' Zeile vor Ihrer' add' Zeile ausgedruckt. – yano
Um 'uint64_t' zu drucken, benötigen Sie einen anderen Formatbezeichner, wie'% llx'. –
Aktivieren Sie die Compilerwarnungen. – Schwern