- ベストアンサー
HEXデータで1ビットずらしたHEXにするアプリ
現在、プロトコルアナライザで得た波形データと、実際に送信しているデータとで違いがあるとのことで、たぶんSPI方式と思われる回路でのプロトコルで調査しているところです。 ここで得られたHEXデータ 0x1F,0x40,0x56,0xC7 このHEXデータを 2'0001111, 2'01000000, 2'01010110, 2'11000111 このデータを1bitずつ右にローテートしてずらして、HEXデータを素早く出力してくれるような計算ソフトとかご教示いただけないでしょうか? どうぞ、よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
windows電卓の16進モードではだめでしょうか? 1F4056C7 / 2 = 0FA02B63 16進<>2進 相互変換も出来ます
その他の回答 (3)
そのような用途に特化したアプリ(ソフト)は無いと思います。 データがバイナリなのか、ベタのHEXテキストファイルなのか、0xが付けられたテキストなのか不明なので、今までの回答者の方も、いろんなケースを想定して苦労されていると思います。 基本的にはご自身で作ることになると思います。 C言語なら数ステップで簡単に作れますし、前の回答にあるようにエクセルへ手動で取り込んで、計算式を入れてもいいし、VBAで自動化してもいいです。 SPIデータをパソコンで受信しているのなら、SPIデータ線の途中に回路を入れて、リアルタイムで右シフトしながらPCへデータを送ることも出来るかもしれません。
お礼
回答頂きありがとうございます。ちょっと最終的に、波形を紙に印刷して、値を確認することで確認しました。現在手元で使用できるlap-c16064というロジアナのSPI波形読み取りだとクロックのスタートビットの位置に違いがあるので、取得できるデータに違いがあるためシフト操作などが必要みたいでした。 自動化できると大変ありがたいなと感じています。 いろいろとアドバイスありがとうございます。
- answer119
- ベストアンサー率64% (31/48)
データの受け渡しがどのようなかたちか分りませんが、データ変換ということならExcelでもできます。 右にローテートするということは、全体を1ビット右にシフトして、弾かれた右端の1ビット(LSB)をもっとも左(MSB)にもってくるということですよね。 そのためには、 (1) 16進データを10進データに変換 (2) そのデータからモジュロ演算を使って2で除したときの余りを求め、LSBを算出 (3) その1ビットを2^7倍して、MSBに位置するよう左に7ビットシフト (4) (1)のデータを右に1ビットシフトするために2で除して、小数点以下は切り捨てる (5) (3)と(4)の値をそれぞれ2進データに変換 (6) それらを加算 もしデータがセルA1にあるとしたら次のような式になります。 =DEC2BIN(MOD(HEX2DEC(A1),2)*2^7)+DEC2BIN(ROUNDDOWN(HEX2DEC(A1)/2,0)) 基数変換の関数を使うにはエンジニアリング関数をアドインしなければなりません。 結果が入るセルの書式は、ユーザ定義で00000000と設定し、必ず8ビット表示するようにしてください。 元のデータがどのようは形式か分りませんが、もし0xなどのプリフィックスがついているならSUBSTITUTE関数を使って省いてください。 また結果に2'などをプリフィックスとして付けたいなら文字列に変換して、CONCATENATE関数を使って結合してください。 ローテートではなく単純に右シフトしたいだけなら、(1)、(4)、(5)だけでいいと思います。
お礼
回答頂きありがとうございます。 エクセルでも2進、16進とかの計算ができると聞いていましたが、具体的な方法とか知らなかったのとても助かります。
- neKo_deux
- ベストアンサー率44% (5541/12319)
バイナリエディタで、ビットシフト、ローテート機能のあるものを使うとか。 Ag:Techsol - PowerWitch the Royal http://techsol.arcadiangarden.com/products/windows/pwtr.php こちらをちょっと試してみましたが、標準設定だとCtrl+[.]で見た目は出来てるみたい。
お礼
回答頂きありがとうございます。 便利な電卓ソフト教えて頂きありがとうございます。 活用させて頂きます。
お礼
回答頂きありがとうございます。 数値に対して2で割ったり、2で割ったりっていうことは右・左シフトの意味ですね。 すっかり忘れてました。 windows7の電卓だとR_Lローテート機能がそのままありますね。 活用させて頂きます。