プロが教える店舗&オフィスのセキュリティ対策術

バイナリーデータをBCD変換したいのですが、C言語でどのようにプログラムを組んだらいいのかわからないので、だれか教えてください。

A 回答 (4件)

私はCはほとんどしたことがないのですが,機械語でそのようなプログラムを組む場合,10で割っていって余りを記録し,割られる数が0になるまで繰り返して組んだ記憶があります。

アルゴリズムは言語が変わっても同じだと思います。
例)123をBCDに直す場合,
123÷10=12・・・3
12÷10=1・・・2
1÷10=0・・・1
これを逆に並べて「123」というBCDデータになりました。
もしかするとこの程度はCのライブラリにあるかもしれませんね。
    • good
    • 1
この回答へのお礼

ありがとうございました。ビットをシフトさせていったら出来るのかなとか考えていたのですが、出来なくて困っていました。教えていただいた方法ならわかりやすいですね。大変助かりました。

お礼日時:2004/12/03 12:37

>バイナリデータは16ビットです。



bcd = ((n/10000)<<16)|(((n%10000)/1000)<<12)|(((n%1000)/100)<<8)|(((n%100)/10)<<4)|(n%10);
ですが、見にくいので、ANo.1さんの手を使いましょう。
答えが最大20ビットになるので、20ビット以上を扱える型が必要です。文字型で欲しければANo.2さんのsprintfです。

unsigned int bin2bcd(unsigned int n) {
unsigned int bcd=0;
unsigned int base=0;

while (n>0){
bcd |= (n%10)<<base;
base += 4;
n /= 10;
}
return bcd;
}
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございました。大変参考になりました。

お礼日時:2004/12/07 13:02

バイナリデータは何ビットでしょうか?


例えば、データが8ビットなら0x000~0x255のコードが得られればいいのですよね。
bcd = ((n/100)<<8)|(((n%100)/10)<<4)|(n%10);
桁数が増えそうならANo.1の方法でループさせた方がいいかも。
    • good
    • 0
この回答へのお礼

ありがとうございました。バイナリデータは16ビットです。

お礼日時:2004/12/06 08:23

安直な方法として、sprintf()で10進表記の文字列にしてから、それをstrtol()の第3引数に16を渡してやれば出来そうです。

    • good
    • 0
この回答へのお礼

ありがとうございました。試して見ます。

お礼日時:2004/12/06 08:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています