我正在從加速度計讀取資料,該加速度計提供 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 中撰寫這些位操作操作?
uj5u.com熱心網友回復:
有兩種方法:
使用
bitshift和直接翻譯代碼bitand。使用
typecast64位的陣列上,以將其轉換為一個16位的陣列,然后通過索引讀出的值:a = uint64(1234567890); a = typecast(a, 'int16'); x = a(3); y = a(2); z = a(1);請注意,元素的順序取決于架構的位元組序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/371523.html
