У меня есть многобайтовый примитивный тип с именем s32, который я хочу прочитать из байтового массива.
Технические характеристики:
Это 32-разрядное целое число со знаком, хранящееся в порядке с прямым порядком байтов.* Отрицательные целые числа представлены с использованием дополнения 2.
Используется от 1 до 5 байтов в зависимости от величины.Каждый байт вносит свои младшие семь битов в значение.Если старший (8-й) бит установлен, то следующий байт также является частью значения.
Применяется расширение знака: седьмой бит последнего байта кодирования равенраспространяется для заполнения 32 битов декодированного значения.
В случае U32 - беззнакового 32-битного я придумал это (любые комментарии приветствуются!), Но не уверен, как изменить его для S32.
char temp = 0;
u32 value = 0;
size_t index = 0;
for(int i = 0; i < 5; i++)
{
if(i < 4)
{
temp = 0x7F & buffer[index];
}
else
{
temp = 0x0F & buffer[index];
}
value |= temp << (7 * i);
if(!(0x80 & buffer[index])) break;
++index;
}
Спасибо всем!