Здравствуйте, Аноним, Вы писали:
А>Добрый день.
А>Есть адрес:
А>DWORD addr = 0x54410000;
А>Нужно из этого числа вытащить 544 для того чтобы в дальнейшем использовать его как маску:
Здравствуйте, igna, Вы писали:
I>Здравствуйте, игппук, Вы писали:
И>>далее mask нужно сдвинуть на два байта вправо И>>mask >> 16
I>Зачем сдвигать вправо? Чтобы потом каждый раз в цикле сдвигать влево?
а, ну возможно и не надо. я просто подумал, что человеку нужна маска типа 0x00000XXX, а не типа 0xXXX00000.
Это вопроса не касается, но лучше использовать DWORD_PTR вместо DWORD для работы с адресами. Иначе при преходе на 64бит платформу можете потерять данные.
А>Добрый день.
А>Есть адрес:
А>DWORD addr = 0x54410000;
А>Нужно из этого числа вытащить 544 для того чтобы в дальнейшем использовать его как маску:
I>Тогда во-первых сдвигать нужно на 20, а не на 16, во-вторых нужно замаскировать старшие разряды, могущие появиться в результате знакового сдвига:
I>
I>(addr >> 20) & 0xFFF
I>
На счет второго & 0xFFF не согласен в данном случае, хотя не повредит. addr — DWORD который является unsigned long. Поэтому старшие биты всегда будут нулем.