从 MATLAB 中的 64 位字段解压 16 位整数值

Unpack 16-bit integer values from a 64-bit field in MATLAB

我正在从加速度计读取数据,该加速度计提供 3 个轴(x、y 和 z)中每个轴的测量值,作为打包到单个 64 位字段中的 16 位整数。

我在 C 中有以下代码来提取这 3 个轴值:

uint8_t byte0 = *somevalue*, byte1 = *somevalue*, byte2 = *somevalue*, byte3 = *somevalue*, byte4 = *somevalue*, byte5 = *somevalue*;
uint64_t xyzDataReg = ((uint64_t) byte0<<40) + ((uint64_t) byte1<<32) + ((uint64_t) byte2<<24) + ((uint64_t) byte3<<16) + ((uint64_t) byte4<<8) + (uint64_t)byte5;
int16_t xRaw = (int16_t)((xyzDataReg >> 32) & 0xFFFF);
int16_t yRaw = (int16_t)((xyzDataReg >> 16) & 0xFFFF);
int16_t zRaw = (int16_t)(xyzDataReg & 0xFFFF);

但现在我需要将这段代码转换成 MATLAB。如何在 MATLAB 中编写这些位操作操作?

有两种方法:

  1. 直接翻译代码,使用bitshift and bitand

  2. 在64位数组上使用typecast将其转换为16位数组,然后通过索引读出值:

    a = uint64(1234567890);
    a = typecast(a, 'int16');
    x = a(3);
    y = a(2);
    z = a(1);
    

    请注意,元素的顺序取决于您的体系结构的字节顺序。