• ベストアンサー

10進数の変換方法

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

質問者が選んだベストアンサー

  • ベストアンサー
noname#11476
noname#11476
回答No.3

どのレベルの質問かわかりませんが、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; でしょうか。 ちゃんと動作は確認していないので、ちょっと自信ないですが。

その他の回答 (3)

noname#11476
noname#11476
回答No.4

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

  • senjyu
  • ベストアンサー率25% (7/27)
回答No.2

こんにちは。 C言語では、Pack/Unpackに対応した進数変換関数はありません。 ゾーンの場合であれば、EBCDICコードかJISコード化によって変わってきます。 ただ、ゾーンもパックも後ろのバイトに符号(+/-)がつきますので 規則性はありますので、自作するしかないのでは。 以下、私が作るとしたらと仮定して 1.必要なものをクラス化する。(Cであれば適せん修正)   元の値の変数、ゾーン値変数、パック値変数、等の変数   Base2Zone(...)関数、Base2Pack(...)、   Zone2Pack(...)関数、Pack2Zone(...)、等の関数 関数の中は、ビット演算のあらしになりますが、それほど難しいものでは ないと思います。 尚、大きな値を使用するようであればバイト数にも注意してください。

  • xinman
  • ベストアンサー率30% (25/83)
回答No.1

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

関連するQ&A