-1

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

我在 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 中编写这些位操作操作?

4

1 回答 1

2

有两种方法:

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

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

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

    请注意,元素的顺序取决于架构的字节序。

于 2021-11-25T15:57:39.967 回答