我正在研究一个涉及Khepera IV移动机器人的本科生项目,当我阅读它附带的文件时,我遇到了一条让我困惑的界线:
for (i=0;i<5;i++) {
usvalues[i] = (short)(Buffer[i*2] | Buffer[i*2+1]<<8);
...从同一文件中,对机器人上的每个超声波传感器初始化为usvalues5,对于超声波传感器的采样率,Buffer[]初始化为Buffer100。但我从没见过像这样的变量集。有人能帮我理解这一点吗?
发布于 2022-11-12 18:52:37
代码读取Buffer[]数组(当然它有8位元素),每次迭代按小字节顺序连续读取两个字节(低地址字节是最不重要的字节)。然后,它形成一个16位值以保存在usvalues[]中。
for (i=0;i<5;i++) {
usvalues[i] = (short)(Buffer[i*2] | Buffer[i*2+1]<<8);代码应该使用uint8_t Buffer[100];来防止执行有符号的左移位。
usvalues[]更适合于某些无符号类型,如uint16_t或unsigned,并使用无符号操作。
uint8_t Buffer[100];
uint16_t /* or unsigned */ usvalues[5 /* or more */];
for (i = 0; i < 5; i++) {
usvalues[i] = Buffer[i*2] | (unsigned)Buffer[i*2+1] << 8;
}https://stackoverflow.com/questions/74415334
复制相似问题