Мне надо вычислить значение выравнивания. То есть, есть массив байт и есть некий указатель внутри него, который может быть невыровненным, иметь, скажем, абстрактное значение 13. Допустим, мне надо выровнять его до 16 всегда в сторону увеличения. В данном случае — прибавить 3. Я делаю это так:
unsigned align = (alignment - unsigned(ptr) % alignment) % alignment;
Где alignment=16 в данном случае.
Вопрос в том, как преобразовать ptr к unsigned без предупреждений компилятора "for the possible 64-bit pointer to 32-bit unsigned conversion", причем надо сделать это без применения __int64 и прочих компиляторо-зависимых типов. Ясно, что если указатель 64 бита, а unsigned — 32, то и фиг с ней со старшей частью, на вычисление выравнивания она никак не влияет.