プロが教えるわが家の防犯対策術!

C言語にてゾーン10進数→パック進数、パック10進数→ゾーン10進数にする
簡単な方法ありませんか?

A 回答 (4件)

どのレベルの質問かわかりませんが、4bit単位のアクセスが出来ると簡単に移行できるので、



union zone_t{
char a;
struct hb_t {
char l:4;
char h:4;
} hb;
} a[100]; /* this is for zone */
struct pack_t {
char b:4;
} b[50]; /* this is for pack */

みたいに4bit単位に操作できるように宣言してあげると、関数の中ではbit操作しなくてもいいから楽に処理できます。

一例として、zone -> pack
i = 0;
while (a[i].hb.h == 0x3) {
b[i].b = a[i].hb.l;
i++;
};
b[i].b = a[i].hb.h;

でしょうか。
ちゃんと動作は確認していないので、ちょっと自信ないですが。
    • good
    • 0

下のものですが、もしかしたら、


struct pack_t {
char b:4;
} b[50]; /* this is for pack */
だと、50byte使ってしまったような、、、
(仕様を忘れてしまいました。)
この場合は、やはりzoneと同じようにh,lみたいに2つ定義する必要があります。

では。
    • good
    • 0

こんにちは。



C言語では、Pack/Unpackに対応した進数変換関数はありません。
ゾーンの場合であれば、EBCDICコードかJISコード化によって変わってきます。
ただ、ゾーンもパックも後ろのバイトに符号(+/-)がつきますので
規則性はありますので、自作するしかないのでは。

以下、私が作るとしたらと仮定して
1.必要なものをクラス化する。(Cであれば適せん修正)
  元の値の変数、ゾーン値変数、パック値変数、等の変数
  Base2Zone(...)関数、Base2Pack(...)、
  Zone2Pack(...)関数、Pack2Zone(...)、等の関数

関数の中は、ビット演算のあらしになりますが、それほど難しいものでは
ないと思います。
尚、大きな値を使用するようであればバイト数にも注意してください。
    • good
    • 0

C言語には自信があるのですが、ゾーンとパックって何ですか?って感じで回答出来ないので補足して欲しいな。

    • good
    • 0

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