- ベストアンサー
ダンプツール作成… 行き詰まりました
当方、C言語初心者です。チームでプログラム作成しているのですが、ダンプツールの作成で行き詰ってしまいました。 バイナリ形式で吐き出されたデータを書き直し、txt形式で吐き出すプログラムが作りたいです。 バイナリデータは64ビットで形成され、最初の2ビットで形式を、次の2ビットでデータサイズを表しています。 先頭2ビット:10(仮にAを表すとします) 2ビット:11(50サイズを表すとします) 上記バイナリを、Aや50と書き換えてtxtに書き出す。 (バイナリデータの数だけ繰り返すものです) 参考サイト等見ているのですが、どうにも理解できません。 Cを少し勉強しただけでは作れる代物ではありませんでした… 仲間内で作成している為、他のメンバーに迷惑を掛けたくありません。 そんな状況から、此方に書き込みさせていただきました。 ご教授、何卒よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、何らかの方法で64ビットのデータを受け取り、それをuint_least64_t型の変数dataに格納するものとして、少し書いてみます。 uint_least64_t data; /* 何らかの方法でデータを受け取る */ /* 上位から2ビットずつ取得 */ int first_2bits = (data >> (64-2)) & 0x3; int second_2bits = (data >> (64-4)) & 0x3; 先頭ビットというのは上位ビットだと解釈して書いてみました。 該当モードの割り出し方法はまったく分からないので、自分で考えてください。 ちなみに、ビットフィールドを使うと、ビットの並び等がどうなるか処理系定義ですので、外部とのインタフェースに使うのはお勧めできません(参考URLを参照)。
その他の回答 (3)
- mizuneko
- ベストアンサー率16% (3/18)
>参考サイト等見ているのですが、どうにも理解できません。 検索するなら、"ビットフィールド"でしょうか。
お礼
有難うございます。参考までに関連サイトを回って見ます。
- jacta
- ベストアンサー率26% (845/3158)
> とある機械が内部で行った情報をバイナリ形式で吐き出してくるのですが ですから、それはどうやって吐き出されて、どうやって受け取るのですか? > ■■□□△△△…△ (64Bit) > ■2BitでAモードを判断 > □2BitでBモードを判断 □2ビットはサイズではなかったのですか? それから、■が配置されているのは、64ビットデータの上位側ですか?
- jacta
- ベストアンサー率26% (845/3158)
> 仲間内で作成している為、他のメンバーに迷惑を掛けたくありません。 仕事でやっているのか、部活等でやっているのか、ボランティアでやっているのか、趣味でやっているのかわかりませんが、基本的にはチーム内で解決すべき問題かと思います。 具体的な作成方法は、情報が少なすぎて説明できません。 そもそも、バイナリ形式のデータというのが、ファイルなのか、何らかの通信経路や入力ポートや専用バスを通して得られるものなのかもさっぱりわかりません(多分こうだろうと思い込むことは簡単なのですが...)。 最初の2ビットというのが、具体的にはどのビットを指すのかもわかりません。10は仮にAとのことですが、では、00, 01, 11は何なのでしょうか? 11が50サイズというのもわかりません。では、00, 01, 10は何を表すのでしょうか?また、50サイズというのは50バイトのことでしょうか?それとも50ワード(ワード長は?)でしょうか?あるいは、もっと別の単位でしょうか?
補足
ご指摘有難うございます。 当方は仕事関係でのツール作成(無くても良いけど、あった方が便利程度のもの)です。 自分の文章力の無さは痛感しております。 なにぶんCは専門時代少し触っていましたが、仕事に入ってからはテスト業務がメイン、つい最近部署移動で急に開発も行うことになった人間です。C知識の無さもあり、変な回答すると思いますがご了承ください。 ツールですが、とある機械が内部で行った情報をバイナリ形式で吐き出してくるのですが、それをいちいち解析するのが面倒とのことで、勉強がてらということで作成をお願いされました。 機械が吐き出してくるバイナリは、機械の現在の状況(設定)です。 たとえば、スピーカーが○○形式で、マイクが○○形式といったものです。変な例えを書いて、逆に混乱させてしまったことをお詫びしますorz データ構成は… ■■□□△△△…△ (64Bit) ■2BitでAモードを判断 □2BitでBモードを判断 バイナリデータ■から、A該当モードを割り出し ” □から、B該当モードを割り出し 最後にtxt形式で書き出す… といった感じです。 質問している本人がそこまで仕様について詳しくないというのは致命的ですね… もう少し把握してから質問するべきでしたorz
お礼
ご返答有難うございます。 先頭ビット=上位ビットで間違いありません。 Cの知識的にも、仕様的にも、曖昧な自分が質問をするのはだいぶ早すぎたと痛感しております。 もう少し勉強をして、知識を身に付け、それでも詰まったら再度質問しようかと思います。 (0x3と書かれて、調べなければ何の事か分からなかったくらい無知です) 教えていただいた知識は無駄には致しません。 至らない自分に貴重な時間を割いて頂き、jactaさん、mizunekoさん有難うございました。 このような中途半端な知識では逆に混乱させてしまいますので、一度質問〆たいと思います。乱文、場汚し、失礼しました。