【发布时间】:2020-01-22 06:31:43
【问题描述】:
我想从 CAN 消息中提取位(8 个字节)。
那么,我如何从 8 个字节中提取位。
【问题讨论】:
-
在我看来,您应该使用 DBC 或 Arxml 中的一些信号定义,然后对 Message::signal 进行操作。但如果你真的想从字节中提取一些位,请使用按位运算和掩码。
我想从 CAN 消息中提取位(8 个字节)。
那么,我如何从 8 个字节中提取位。
【问题讨论】:
这是从一个字节中获取位的代码块:
on message myMessage
{
byte bitArray[8];
int iByteToRead = 0;
f_ByteToBitArray(this.byte(iByteToRead),bitArray);
write ("f_ByteToBitArray %X :Bits %X %X %X %X %X %X %X %X", iByteToRead , bitArray[0],bitArray[1],bitArray[2],bitArray[3],bitArray[4],bitArray[5],bitArray[6],bitArray[7]);
}
void f_ByteToBitArray(byte in, byte out[])
{
// 7 6 5 4 3 2 1 0
// f_ByteToBitArray 1 :Bits 0 0 0 0 0 0 0 1
// f_ByteToBitArray 2 :Bits 0 0 0 0 0 0 1 0
byte a;
a = in;
out[0] = a & 0x01;
a = a >> 1;
out[1] = a & 0x01;
a = a >> 1;
out[2] = a & 0x01;
a = a >> 1;
out[3] = a & 0x01;
a = a >> 1;
out[4] = a & 0x01;
a = a >> 1;
out[5] = a & 0x01;
a = a >> 1;
out[6] = a & 0x01;
a = a >> 1;
out[7] = a & 0x01;
}
【讨论】: