我正在尝试将数字传感器模块连接到Arm Cortex M4F芯片。
从模块接收的数据为3个字节。但是,我的MCU中唯一可用的功能是uint32_t读取功能。我不知道为什么没有uint8_t函数,但也许只是移位位的问题?我在这里学习C ++。
所以我将值读取为:
uint32_t value = mcu_read(pin);
value
现在包含一个uint32_t
(4个字节)。我需要前三个。是否可以通过任何方式将其“提取”出来?
这有意义吗? showstopper是mcu_read函数,它至少读取4个字节。如果有uint8_t
个读取函数的地方,我可以调用它三次以获取所需的数据。
答案 0 :(得分:8)
您可以使用bit shift and logical and提取字节:
uint32_t value = mcu_read(pin);
uint8_t byte_0 = (value >> 24) & 0xFF;
uint8_t byte_1 = (value >> 16) & 0xFF;
uint8_t byte_2 = (value >> 8) & 0xFF;
uint8_t byte_3 = (value) & 0xFF;
答案 1 :(得分:3)
像这样吗?
uint32_t value = mcu_read(pin);
uint8_t* bytes = (uint8_t*)(&value);
uint8_t byte_0 = bytes[0];
uint8_t byte_1 = bytes[1];
uint8_t byte_2 = bytes[2];
uint8_t byte_3 = bytes[3];
注意耐力
答案 2 :(得分:1)
df['new'] = df.groupby('key')['cond'].apply(lambda x: x.shift().bfill().cumsum()).astype(int)
print (df)
key cond new
0 A 1 1
1 A 1 2
2 B 1 1
3 B 0 2
4 A 0 3
5 A 1 3
6 B 1 2
输出:
#include <stdio.h>
#include <stdint.h>
int main()
{
uint32_t value = 0xAABBCCDD;
//-------------------------------
//byte3 | byte2 | byte1 | byte0 |
//-------------------------------
uint8_t byte_0 = (uint8_t)value; //truncation according to casting rules
printf("first byte: %x\n",byte_0);
value>>=8; //right shift will result in the following bytes:
//-------------------------------
// garbage | byte3 | byte2 | byte1 |
//-------------------------------
uint8_t byte_1 = (uint8_t)value;
printf("second byte: %x\n ",byte_1);
value>>=8;
//etc...
}