Скажите, что у вас есть целое число, и вы хотите преобразовать его в массив байтов. После поиска в разных местах я видел два способа сделать это: один с сдвигом, а один - сдвигом, затем маской. Я понимаю смещающуюся часть, но зачем маскировать?Маска или нет маски при преобразовании int в байтовый массив?
Например, сценарий 1:
uint8 someByteArray[4];
uint32 someInt;
someByteArray[0] = someInt >> 24;
someByteArray[1] = someInt >> 16;
someByteArray[2] = someInt >> 8;
someByteArray[3] = someInt;
Сценарий 2:
uint8 someByteArray[4];
uint32 someInt;
someByteArray[0] = (someInt >> 24) & 0xFF;
someByteArray[1] = (someInt >> 16) & 0xFF;
someByteArray[2] = (someInt >> 8) & 0xFF;
someByteArray[3] = someInt & 0xFF;
Есть ли причина выбрать один над другим?
В этом конкретном коде маска является избыточной. Другие варианты кода могут понадобиться. Кроме того, некоторые компиляторы дают ложные предупреждения, если вы не маскируете. –
@YuHao Исправлено, спасибо! –
Если вам не нужна маска, ее устранение может сэкономить четыре инструкции «и». – Davislor