У меня есть переменная size_t
nOffset
, которая содержит ряд из которых я хочу узнать, сколько байтов действительно необходимо для его хранения. Я полагаю, что положение MSB также может быть использовано? Это мой код до сих пор (sizeof(size_t)
составляет 4):Как узнать, сколько байтов необходимо для хранения значения (int) в C
int nLen = 0;
if (nOffset > 0xFFFFFF)
{
nLen = 4;
}
else if (nOffset > 0xFFFF)
{
nLen = 3;
}
else if (nOffset > 0xFF)
{
nLen = 2;
}
else
{
nLen = 1;
}
Альтернативой, не обязательно намного лучше, является использование цикла для проверки того, есть ли все, кроме нижнего (наименее значимого) байта, любые ненулевые биты. –
Лучше использовать формулу из теории информации вместо цикла: '(size_t) (log (number)/log (2))' – EgorBr
Фактически код OP (который по существу является развернутым контуром) будет быстрее, чем цикл, который, в свою очередь, будет быстрее, чем вычисление логарифмов. –