Bitwise OR and Bitwise shift
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am trying to write a matlab code pretty much like the following C code :
uint8_t data[6];
uint32_t tdata = data[3] & 0x0F;
tdata <<= 8;
tdata |= data[4];
tdata <<= 8;
tdata |= data[5];
temperature = ((float)tdata * 200 / 0x100000) - 50;
I recently started using MATLAB and how I translated the above code is something like this :
uint32(tdata) = data(3) & 0x0F;
uint32(tdata) = bitshift(tdata,8);
uint32(tdata) = bitor(tdata,data(4));
uint32(tdata) = bitshift(tdata,8);
uint32(tdata) = bitor(tdata,data(5));
temperature = (tdata*200/1048576)-50;
It's throwing a lot of errors and I am quite stuck. Please help me out here. Thank you in advance.
2 commentaires
Réponses (1)
Walter Roberson
le 26 Avr 2021
Modifié(e) : Walter Roberson
le 26 Avr 2021
temperature = double(bitand(data(4), 0x0f) * 65536 + data(5) * 256 + data(6)) * 200 / double(0x100000) - 50;
2 commentaires
Walter Roberson
le 26 Avr 2021
Use. You are using non-overlapping fields. Shift by multiplying, and add the components.
There are other ways of doing the calculation, but you run into hassles about the fact that MATLAB is little-endian on all current platforms, so doing bit operations is not the same as doing mathematical operations.
For example,
typecast( [data(6), data(5), bitand(data(4), 0x0f), uint8(0)], 'uint32') %slam together little-endian style
Voir également
Catégories
En savoir plus sur Data Import and Analysis dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!