这不是一个常规的“二进制到bcd”问题,实际上,我不确定要调用的东西是什么!

嵌入式设备中只有一个字节,它以以下格式存储数字1到7(一周中的几天):

00000001 = 1
00000010 = 2
00000100 = 3
00001000 = 4
00010000 = 5
00100000 = 6
01000000 = 7


我想读取该字节,并将其内容(1到7)转换为BCD,但是我不确定如何执行此操作。

我知道我可以使用一系列if语句来强行使用它:

if(byte == B00000001)
{
    answer = 1;
}
else
if(byte == B00000010)
{
    answer = 2;
}


等等,但我认为可能会有更好的方法。该数据存储在实时时钟的单个寄存器中。我通过执行I2C读取来获取此字节,然后将其读入程序中的一个字节。该实时时钟的数据表指定该特定寄存器的格式如上所述。

最佳答案

您可以使用查找表...

/* this is only needed once, if lut is global or static */
unsigned char lut[65];
lut[1]=1;
lut[2]=2;
lut[4]=3;
lut[8]=4;
lut[16]=5;
lut[32]=6;
lut[64]=7;

...
...
...

/* Perform the conversion */
answer = lut[byte];


或者甚至可以使用一些数学运算...

answer = 1 + log(byte)/log(2);

关于c++ - 将一键编码转换为纯二进制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21212340/

10-13 08:23