ある法則に基づく進数変換の名称とその考え方

このQ&Aのポイント
  • バイナリ解析を行っている際に、16進数を特定の法則に従って変換する方法について質問しています。左の値に1を羅列し、それを2進数として扱ってから16進数へ変換するという手順を取ることで変換を行っています。
  • 質問者は具体的な名称を知りたいとしています。たとえば、BCDコードのように特定の名称があるのかどうかについて興味があります。
  • これまでの法則からの変換例もいくつか示されており、質問者はプログラミングのカテゴリとしては適切な質問なのかについても言及しています。
回答を見る
  • ベストアンサー

ある法則に基づいて進数変換する際の名称について

こんにちは。とあるファイルのバイナリ解析を行っております。 以下は16進数(左)とその16進数をある法則に基づいて変換した値(右)ですが、 このような変換方法や考え方について、何か名称はあるのでしょうか? (たとえばBCDコードですとか) 02…03 03…07 04…0F 05…1F 07…7F 08…FF 09…FF 01 0C…FF 0F 0D…FF 1F 0E…FF 3F 0F…FF 7F 10…FF FF 11…FF FF 01 22…FF FF FF FF 03 A4…FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0F 法則としては、以下のような感じです。 1.左の値の分1を羅列する。 2.上記の羅列を2進数として扱い、16進数へ変換する。 例)02の場合、11→00000011(2進数)→03(16進数) 例)09の場合、111111111→11111111 00000001(2進数)→FF 01(16進数) プログラミングのカテゴリとしては相応しくないかもしれませんが、考え方など こちらで質問させていただくのが妥当かと思い、本カテゴリへ投稿いたしました。 以上、よろしくお願いします。

  • y3k
  • お礼率90% (48/53)

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

> 1.左の値の分1を羅列する。 これについては便宜的に一進法と呼ぶことがあります。 一進法 - Wikipedia http://ja.wikipedia.org/wiki/1%E9%80%B2%E6%B3%95

y3k
質問者

お礼

早速のご回答ありがとうございます。 一進法というのは初めて聞きましたが、こちらに当てはまりそうです。 もうしばらく募集を続けたいと思います。

関連するQ&A

  • 10進数をBCDに変換する方法

    10進数から2進化10進数(BCD)に変換するところで疑問があります。 たとえば、10進数の3846をBCDに変換する場合答えはどのようになりますか? 私なりに考えたところまでを示しますが、答えがわかりません。 どこに考え方の間違いがあるのでしょうか? まず、3846を2進数に変換しました。 3846 → 0000111100000110 (2進数)となります。 ここからBCDに変換する場合、4ビットずつを1つと考えて数字を表現するので、上記の2進数の頭から4つずつ分けて考えると 1つ目 0000 2つ目 1111 3つ目 0000 4つ目 0110 の4つにわけました。 続いて、それぞれを10進化しました。 1つ目 0000 → 0 2つ目 1111 → 15 3つ目 0000 → 0 4つ目 0110 → 6 ここで疑問が出てきます。 2つ目のところで、1111を10進化すると15となってしまい桁上りが生じます。 この場合どのように処理するのが良いのでしょうか? どなたかご教授ください。

  • 10進数をBCDに変換する方法

    10進数から2進化10進数(BCD)に変換するところで疑問があります。 たとえば、10進数の3846をBCDに変換する場合答えはどのようになりますか? 私なりに考えたところまでを示しますが、答えがわかりません。 どこに考え方の間違いがあるのでしょうか? まず、3846を2進数に変換しました。 3846 → 0000111100000110 (2進数)となります。 ここからBCDに変換する場合、4ビットずつを1つと考えて数字を表現するので、上記の2進数の頭から4つずつ分けて考えると 1つ目 0000 2つ目 1111 3つ目 0000 4つ目 0110 の4つにわけました。 続いて、それぞれを10進化しました。 1つ目 0000 → 0 2つ目 1111 → 15 3つ目 0000 → 0 4つ目 0110 → 6 ここで疑問が出てきます。 2つ目のところで、1111を10進化すると15となってしまい桁上りが生じます。 この場合どのように処理するのが良いのでしょうか? どなたかご教授ください。

  • 10進数を2進数に変換したい。

    業務上であるログの値を解析しています。 ※ログはcsv形式で、Excelに落として編集加工しています。 その中で、10進数を2進数に変換する必要がありますが、変換方法がよくわかりません。 ExcelでDEC2BINという関数があるところまでは突き止めたのですが、 この関数は、与件(10進数)が512を超えるとエラーとなってしまいます。 (解析対象は10進数で10桁です・・。) 2進数に変換する関数、方法などはあるのでしょうか? 大量にログがあるので、一括して加工したいのですが・・。 (VBAの使いかたがわからないので、何とか関数か何かで対処したいのですが・・・。Excelは2002を使ってます)

  • 8桁の2進数を10進数に変換する方法を教えてください。

    キーボードから2進数を入力した値を10進数に変換し、変換結果を出力する方法が解りません。作成するにあたり仕様があり、私一人では解決できないので相談させていただきました。 <仕様は以下の通りです> (1)このプログラム(8桁の2進数を10進数に変換)をする際は、最後に出力する時(printf)以外は関数を使ってはいけません。 (2)キーボードから2進数を入力させる。 (3)空白(ブランク)が入力されても変換可能にする。 (4)入力された2進数は8桁にし、8桁以上の場合はエラーを出す。 (5)2進数の「0」と「1」以外の文字が入力された場合はエラーを出す。 (6)バイナリ変換をし、変換結果を出力する。 以上になります。 まだ、C言語を勉強を習い始めの初心者です。どうか、ご回答のほど宜しくお願いします。

  • 2進数&10進数&16進数の変換

     ◆ コンピュータで使用される2進数  人が日常使用している数値は10進数ですが、コンピュータは内部で数値を表現する場合、2進数を使用  しています。しかし、「0」と「1」だけの2進数では人が分かりにくいため、人間が見えるところでは  コンピュータは2進数を10進数や16進数が変換して表現しています。ここではその変換方法を学びます。  ◆ 2進数  2進数とは、「0」と「1」の2種類の数字を用いて全ての数を表現します。10進数では0から数えて「9」の  次は位があがることになりますが、2進数では「 1 」の次に位があります。位があがれば、その新しい桁は   「 1 」 となり、それ以下の桁は全て 「 0 」 となります。それでは、2進数の数の増え方を見てみましょう。      ところで、2進数を表現する時は一般的に8桁単位で表現するため、8桁未満の場合は頭に0をつけます。  つまり、上の2進数の値は順番に 00000000 → 00000001 → 00000010 → 00000011 → 00000100 →  00000101 → 00000110 → 00000111 → 00001000 と表します。以下は2進数と10進数の対応表です。 2進数と10進数の対応表 10進数 0 1 2 3 4 5 6 7 8 9 10 ・・・ 2進数 0 1 10 11 100 101 110 111 1000 1001 1010 ・・・  ◆ 2進数から10進数への変換方法  10進数と2進数の対応表は以下の通りです。2進数の桁が上がる時の10進数の値が以下となります。 2進数と10進数の対応表2 10進数 1 2 4 8 16 32 64 128 2進数 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000  従って、2進数で「1」となっている桁に対応する上記の10進数の基準値を合計することにより、2進数から  10進数の値を求めることができます。例えば、2進数の「 00101010 」を10進数に変換する場合、基準値が  32、8、2の所でビットが1なので下図の通り、2進数の「 00101010 」は10進数では「42」だと分かります。            ◆ 10進数から2進数への変換方法  10進数の数値を「 0 」になるまで「 2 」で割り算していき、その結果の「余りの数 」を並べることで  ある10進数の値を2進数の値へ変換することができます。それでは、具体的に変換して見て行きましょう。           例えば、10進数の「160」を2で割り算していくと上図の結果となります。後は、余りの数を下から順番に  並べれば 「 10100000 」 の値が算出されます。次に、「22」を2で割り算していき余りの数を下から順に  並べれば 「 10110 」 の値が算出されます。ネットワークにおいては、2進数を一般的に8桁で表示する  ことから、8桁になるよう上位に「 0 」を追加して「 00010110 」とします。当然「 10110 」と同じ値。 因みにここ参照ですがhttp://www.infraexpert.com/study/ip1.html なぜこれが10進数なんでょうか? 10進数というのは、0から9までの数字が1増えて10になるんですよね? なのに2進数と10進数の対応表2を見ると 倍数になっているのですが、、 これはいったいどういう違いなんでしょうか? 回答お願いいたします。 ほかにも解らなそうな点は、教えて頂けると幸いです。

  • 3で割り切れる数についての法則とその応用

    ある整数の各桁の数を足して3で割り切れる場合にはその整数も3で割り切れるようですが、この法則の応用例は何かありますか。

  • 10進数を60進数へ変換

    60進数変換について、いろいろと質問・回答をみていますがよくわかりません。 (例)10進数→60進数      5.233333 → 5.14      8.783334 → 8.47 計算方法はいろいろな回答をみてこの数字になります。 (例:A1に10進数の数字が有る場合です⇒=INT(A1)+ROUND(60*MOD(A1,1),0)/100) ただ、「100」の場合は「100」になってしまうのです。 例えば、「100」を16進数にした場合は「64」となります。 16進数にした場合は10進数より数字だけをみると小さくなっています。 60進数にするとさらに小さくなると思いますが(見た目です)、元の数字と大差ありません。 16進数はよく使用するのでわかるのですが60進数がよくわかりません。 16進数は「F」まで使用するが60進数は数字のみなのでしょうか。 いろいろと言っていますが、質問は「100」「512」を60進数にするとどうなるのでしょうか。 宜しくお願いいたします。

  • PLDでのコード変換・比較回路

    お世話になります。 グレイコード(9bit)で入力された値をバイナリーコード→BCDコードと変換し、この値と別途設定したBCDコードとの大小を比較し、その結果を出力するロジックを組みたいのですが、PLDを使えば簡単に出来ますでしょうか? どういったデバイスなら可能でしょうか? 汎用的なところでお教えいただけると助かります。 宜しくお願いします。 以上

  • 16進数から10進数に変換

    いつもお世話になります。 先日バイナリデータを読み込み、ある特定のデータを検索し、 そのデータを10進数に変換する処理がしたいです。 FILE *fp; char buf[1024]; fp = fopen("sample.jpg","rb"); fread(buf, siZeof(char), 1024, fp); for( int i=0; i<1024; i++ ){ if( (buf[i]==0xff) && (buf[i+1] == 0xe0) ){ //※質問詳細下記します。 } } ※ f文で、buf[i+2]buf[i+3]、例えばprintf("%02x,%02x",buf[i+2],buf[i+3]); で出力すると、所望の(11 00 )の16進数で得られています。 このbuf[i+2] buf[i+3]の値を10進数に変換して得るには、 どうしたらいいでしょうか? 0x1100→4352 どうぞよろしくお願い致します。

  • 16進数変換

    文字列16進数をバイナリ16進数に変換する参考ソースが以下のようになっていたのですが、どういう意味でしょうか? strSerial ..... 文字列16進数 ForwardBuf ..... char BackBuf .....char /* 文字列16進数長を代入 */ Len_strSerial = strlen(strSerial); /* 文字列16進数を大文字に変換 */ for (iToupCnt=0; iToupCnt < Len_strSerial; iToupCnt++) { tmpbuf[iToupCnt] = toupper(strSerial[iToupCnt]); } for (iStrsCnt = 0; iStrsCnt < Len_strSerial; iStrsCnt += 2) { ForwardBuf = (tmpbuf[iStrsCnt] >= 'A' ? tmpbuf[iStrsCnt] - 'A' + 10 : tmpbuf[iStrsCnt] - '0'); BackBuf = (tmpbuf[iStrsCnt + 1] >= 'A' ? tmpbuf[iStrsCnt + 1] - 'A' + 10 : tmpbuf[iStrsCnt + 1] - '0'); binSerial[iBSLCnt] = ForwardBuf * 16 + BackBuf; iBSLCnt++; } ちょっと見にくいですね・・・すみません よろしくお願いします ちなみに最終的にはバイナリ16進数とバイナリ16進数長が 求められるようです。

専門家に質問してみよう