• ベストアンサー

4バイトより大きな値の2進数への変換方法

コマンドライン引数で4バイトで収まらない値(0x100000000以上)を受け取り、 2進数へ変換し出力したい場合はどのようにすればよいでしょうか? ※longlongのような64bit型を使わないことが前提として・・・ よろしくお願いします。

noname#142160
noname#142160

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

例えば8バイトの整数値であれば 4バイト×2、あるいは1バイト×8と考えて それぞれ2進数に変換します。 それを"0"埋めして桁を揃えて、連結して表示すれば良いだけです。 8バイトの符号無整数値:0xFFFFFFFF00001111なら 0xFFFFFFFF→11111111111111111111111111111111(2進数) 0x00001111→00000000000000000001000100010001(2進数) を連結して 1111111111111111111111111111111100000000000000000001000100010001 となります。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.1

コマンドライン引数で受け取るのが16進数を表す文字列と 限定してよいのであれば先頭から1文字づつ '0'→"0000" '1'→"0001" '2'→"0010" '3'→"0011" ~ 'F'→"1111" として出力。

関連するQ&A

  • 10進数→2進数の出力について

    コマンドライン引数から10進数の値を入力して 2進数に変換して出力しようとしています。 ※入力される10進数の値はかなり大きなものを想定しています。 現在は下記のようなコードで変換しようとしていますが失敗しています。 動作環境は『WindowsXP、Activeperl-5.12.4.1205』です。 拙い説明ですが、よろしくお願いいたします。 # コマンドライン引数は「9223372036854775808」 $n = unpack("B8", pack("C", $ARGV[0])); print n; # 実行結果は「11111111」 # 期待している出力結果は「1000・・・000」(←0が64個) 9223372036854775808

    • ベストアンサー
    • Perl
  • 16進数のバイト数

    16進数のバイト数を出力させます。 printf("%d byte\n",sizeof(0x12)); ⇒4 byte 4bit×2=8bit(1byte)になると思ったのですが、なぜ4byteになるのでしょうか。 基礎的なことかもしれませんが、原因が分からず悩んでしまいました。 もしお分かりの方いらっしゃいましたら教えてください。

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

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

  • javaで16進数のバイナリデータ4バイトを10進数に変換する方法

    今私が行なおうとしていることは、char型とbin型が混ざり合ったファイル(1レコード301バイト)から固定バイト部分(bin型の部分4バイト分)を切り取り、 テキストファイルで読み取れる数値(int、又はbouble)に変換・出力するという作業です。 FileInputStreamとDataInputStream.read()を使用し、全データをbyte[]で取得、対象固定バイト部分のbyte[]取得までは出来ました。 取得したbyte[]の値を見ると、16進数表記になっていました。ここで、1バイト分(byte[1])をintValueでintに変換する事はできましたが、 4バイト分(byte[4])の値を一気に10進数表記にしてint型で出力する方法がわかりません。 誰かわかる方はいらっしゃいますか?そもそもできないのでしょうか? またはもっと良い方法があれば教えていただきたいです。 補足としてですが、BufferedReaderでファイルを読込まなかったのは、bin型データ部分がたまたま改行コードになってしまうことがあり、readLine()で1行データ(301バイト分)を取得できないからです。 こちらの方法でも読込み・変換できるのでしょうか? 誰かわかる方がいらっしゃったらぜひ教えて下さい!

    • ベストアンサー
    • Java
  • 10進数(+-)→2進数への変換(2)

    先ほど、ご質問させて頂きました者です、詳細にご説明させて頂きます (1)10進数:-16072 → 2進数:1100 0001 0011 1000 補足:2進数の16bit目の「1」は符号ビット「ー」 (2)10進数:+16072 → 2進数:0011 1110 1100 1000 補足:2進数の16bit目の「0」は符号ビット「+」 補足:10進数の値の範囲は    2進数で 符号1bitを含む16bitの値の範囲です と変換できるVB関数をご教示ください 宜しくお願いいたします

  • 10進数の実数値の値を32ビットで表す16進法に変換したいのですが

    10進数の実数値の値を32ビットで表す16進法に変換したいのですが 方法がわかりません。 例えば10進(1.23)を16進(70A43F9D)に変換したいのです。 ご存知の方がいらっしゃいましたら宜しくお願いいたします。 環境は、VB2005です。

  • 引数別の例外処理

    (1)コマンドラインの1つ目の引数を整数に変換して、int型の変数num1に代入。 (2)コマンドラインの2つ目の引数を整数に変換して、int型の変数num2に代入。 (3)num1とnum2の掛け算結果を標準出力。 (4)例外「NumberFormatException」が発生した場合は、“○(引数の例外発生した方の値)は整数に変換できません”の文字列を標準出力し、プログラム終了。 という問題で、NumberFormatException の○の部分の表示の仕方を教えて下さい。

    • ベストアンサー
    • Java
  • 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を見ると 倍数になっているのですが、、 これはいったいどういう違いなんでしょうか? 回答お願いいたします。 ほかにも解らなそうな点は、教えて頂けると幸いです。

  • 実行ファイルに値を渡す方法

    実行ファイル(EXE)に実行時にパラメータとして値を渡したいのですが、方法がわかりません。 コマンドライン引数を使用するのでしょうか?

  • 文字数の限界

    つい最近、友人から「コマンドライン引数として受け取れる最大文字列数は、どれくらいかわかる?」と聞かれました。 コマンドライン引数を保存する配列の要素数を決める際に、コマンドライン引数として渡すことができる文字列の限界(または、一般的に想定している文字数)を要素数にしたいとのことだったのですが、どなたか教えていただけないでしょうか? あと、ほかに文字数の上限が設定されているようなもの(例 ファイル名など)があれば教えてください。

専門家に質問してみよう