hex関数のように10進数から2進数に変換する関数はないでしょうか?
もしあれば教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

hex に相当する“bin 関数”というのは標準ではありませんが、sprintf で代用できますよ。


以下のサンプルプログラムをご覧下さい。

$a = 123;
print sprintf("%b\n", $a);

実行結果 → 1111011

桁数を指定したければ、%b の代わりに %016b などとすればOKです。
(この場合、結果は 0000000001111011 となります。)
    • good
    • 0
この回答へのお礼

ありがとうございます。

一応調べて、
unpack("B*",pack("N", 123 ));
でとってくるようにしていました。

sprintfがありましたね。忘れてました。

お礼日時:2001/12/05 14:10

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q10進数と2進数の少数の違いについて

10進数の0.1は 1/10 から計算できますが

2進数の0.1の10進法表記は1/2^1で計算して 0.5 ですよね。

整数の場合、10進数も2進数も例えば 1 の大きさはかわらないのに

なぜ少数になると大きさが2進数と10進数で変わってしまうのでしょうか?

 

Aベストアンサー

> 整数の場合、10進数も2進数も例えば 1 の大きさはかわらないのに
> なぜ少数になると大きさが2進数と10進数で変わってしまうのでしょうか?

例えに1を持ってくるから変なのでは?


2進数の10
10進数の10
の大きさが違う理由は説明できますか?

それと同じ理由になると思います。

Qhex関数について

print hex( 0x41 );        結果 101

ですが
0x41は 16進数41で  10進数の65ですね?
なぜ101となるんでしょうか?
教えてください。

Aベストアンサー

カテゴリーがPerlなんだから言語もPerlなんじゃ?

でPerlだとして、hex関数の引数は文字列をとりますが
質問の例では整数を渡しています。
そこで、0x41を十進数に変換→65
それを文字列化→”65”→hexにわたされる
→十六進文字列として解釈される
→十進で出力
→101

となります。

Q2進数→10進数

(1)2進数の0.101を10進数に
(2)2進数の1001.01を10進数に

解き方が全くわかりません。
どなたかよろしくお願いします。

Aベストアンサー

こんばんは。

たとえば、
1011 という2進数があるとき、
8の位が1
4の位が0
2の位が1
1の位が1
と考えます。
ですから、1011(2進数)= 8+2+1(10進数) です。
そして、位が1つ下に行くにしたがって、半分になるのですから、
小数点以下は、0.5の位、0.25の位、0.125の位・・・となっていくわけです。
私はこのことを説明するとき、よく
8円玉、4円玉、2円玉、1円玉、0.5円玉、0.25円玉、0.125円玉・・・
というふうに例えます。


(1)は、0.5円玉1枚、0.125円玉1枚なので、
0.5+0.125
です。

こう言われてみると、簡単でしょ?


以上、ご参考になりましたら幸いです。

QURLを進数で表す方法

お世話になります。

掲示板などで、検索項目があると思います。
たとえば、テスト投稿という文字で検索した場合、http://○○.com/index.cgi?kensaku-koumoku=テスト投稿というURLになったとします。これをhttp://○○.com/index.cgi?kensaku-koumoku=%83e%83X%83g%93%8A%8DeなURLにしたいのです。

最初の検索の際は、上記のようになってくれるのですが、検索項目に当てはまる投稿が多い場合、次へというリンクがありそこにはkensaku-koumoku=テスト投稿となってしまいます。どのようにしたら、次へのリンクもkensaku-koumoku=%83e%83X%83g%93%8A%8Deのように出来るのでしょうか。
どなたか方法を教えていただけませんか。
宜しくお願いします。

Aベストアンサー

 俺が使ってる方法は、"?" よりも右側についてのみ、

  $result =~ s/(\W)/'%'.unpack("H2", $1)/ego;

 というURLで置き換えてしまう奴です。

Q10進数から8けたの2進数に変換

10進数から2進数への変換はわかるのですが
10進数から8桁の2進数への変換がわかりません。
仮に10進数の38を8桁の2進数に直す場合、どんな過程を経て、8桁の2進数になるのでしょうか。
どなたか教えていただけますと有難いです。
宜しくおねがいします。

Aベストアンサー

Windowsに付いてる電卓を、関数電卓にして
10進数から2進数への変換
8桁に統一したい場合は、
38=#100110=#00100110=%26(16進数)
これで良いと思いますよ。

PIC・AVRマイコンでは、こうやって使います。

      

QLEFT関数のようなもの(7桁の数字から左の3桁の数字を抜き出す)

はじめての質問です、よろしくお願いします。

ホームページでのアクセス制限を行うフリーcgiを修正・改造して、目的にかなうように作り替えたいのです。

このアクセス制限で行いたいのは
 ・パスワードに7桁の数字を入力(例:1234567)
 ・左の3桁(123)だけをパスワードリストに照合。

この「7桁の数字から左の3桁の数字を抜き出す」という部分にお手上げの状態です。

LEFT関数の様なもの、または、そのような処理をする方法について、アドバイスやヒントをお願い致します。

また、入力されたパスワードが7桁かどうかのチェック方法についてもよろしければアドバイス下さい。

Aベストアンサー

substr(文字列,取り出す最初の位置,取り出す長さ)

というのを使えばOKです。

文字数を数えたいのであれば
length(文字列)
がいいかと。(ただしバイト数ですので)

Q2進数の0.101101101101・・・は10進数ではいくら?

2進数の0.101101101101・・・は10進数ではいくら?
という問題です。2進数の循環小数の10進数のなおしかたがわかりません。よろしくお願いいたします。

Aベストアンサー

変換の仕方は10進数の循環小数のときと基本的に同じで、計算を全て2進数で行い最後に分子・分母をそれぞれ10進数に直します。

x = 0.101101101...     (1)
両辺を 1000 (=2^3) 倍して、(3桁の繰り返し)
1000 * x = 101.101101...  (2)
(2)式 - (1)式で、
(1000 - 1) * x = 101    (3)
111 * x = 101
x = 101 / 111
101 / 111 は、10進数で 5 / 7。

2進数の計算といっても注意するところは、
(2)式の循環小数の繰り返し桁数に応じて右辺の小数部を相殺するために2^k倍するところと、(3)式の左辺の減算くらいです。

Qsprintfで10進数を桁数指定で16進数に変換する方法

10進数から16進数への変換自体は分かります。
$hex = sprintf("%lx",$decimal);
で出来るのですが、例えば、10進数の10を16進数の0x00000Aと常に6桁にして出力するにはどうすればよいでしょう?(先頭の0xは出力しなくてもいいです。)
手元のPerl辞典には、sprintfの形式指定で出来るとなっており、指定パラメータとしてm(最小幅)というのが載っているのですが、実際の使い方の用例が無く、色々試したのですが、上手く行きません。
どなたか詳しい方、ズバッとコマンド記述の実例を一行お願いいたします。

Aベストアンサー

単純に
$hex=sprintf("%06X",$decimal);
フラグにて 0 数値の前を0で埋める。
      6 その桁数
      X 16進数(大文字)
では? 

Q10進数から2進数への変換の仕方について

10進数から2進数への変換の仕方について
以下のサイトに説明があったのですが、
http://www.pursue.ne.jp/jouhousyo/sysad/sysad010.htm

10進数の60を2進数に変換する場合、変換したい10進数を商が0になるまで2で割りつづけ商と余りを求めていますが、その時に、15/2などは7.5になり余りが、説明では商が7、余りが1になっています。
10進数から2進数へ変換する場合は、小数点以下の余りはすべて1として計算するのでしょうか?

Aベストアンサー

> 小数点以下の余りはすべて1として計算するのでしょうか?
元の10進数が整数なら、2進数で表記しても整数です。

2で割るのは2のn乗の桁について考えるからです。
順に下位の桁に移るので、小数にして考えては行き詰ります。

Qrequire後、関数を実行時にサブルーチンが存在すれば実行させたい

perlでrequire後、関数を実行時にサブルーチンが存在すれば実行させたいのですが、どうやれば調べられるかご存知でしたらご教授願えませんでしょうか。
foreach(...){
require "$file";
&Print;・・・ここでエラーが出てしまうのを関数が存在する場合だけ実行するようにしたいのです。
}

宜しくお願い致します。

Aベストアンサー

じゃあ最強の手段, 型グロブに対する参照でどうだ.
if (defined *Print{CODE})
とか (Print が foo パッケージで定義されているなら)
if (defined *{$foo::{Print}}{CODE})
とか.


人気Q&Aランキング