0

これは通常の「バイナリから bcd へ」の質問ではありません。

組み込みデバイスには、1 ~ 7 の数字 (曜日) を次の形式で格納する 1 バイトがあります。

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; 
}

などですが、もっと良い方法があると思います。このデータは、リアルタイム クロックの 1 つのレジスタに格納されます。I2C読み取りを実行してこのバイトを取得しており、プログラムでバイトに読み取ります。このリアルタイム クロックのデータシートには、この特定のレジスタが上で概説したようにフォーマットされていることが明記されています。

4

3 に答える 3

3

ルックアップテーブルを使用できます...

/* 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);
于 2014-01-19T02:19:13.150 に答える