我有一个名为 s32 的多字节原始类型,我想从字节数组中读取它。
规格如下:
它是一个 32 位有符号整数值,以 little-endian 顺序存储。
负整数使用 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;
}
谢谢大家!