Я пытаюсь получить число, которое равно 16 цифрам 0x1122334455667788, и бит смещает его для учета минимальной нумерации.uint64_t in C, действующий как uint32_t
Используя следующий пример кода для загрузки числа в из ячеек памяти
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);
}
}
Выход производит:
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
Это не имеет смысла для меня до тех пор, оных 0x44, почему делает бит сдвиг не будет продолжать толкать цифры влево? Почему я не могу сделать число из 8 цифр?
Что такое 'memory_t'? Кроме того, ваша строка 'save' выдается перед вашей линией' add'? – yano
Для печати 'uint64_t' вам нужен другой спецификатор формата, например'% llx'. –
Включите предупреждения компилятора. – Schwern