PHP進数の扱いについての質問

このQ&Aのポイント
  • PHPを勉強中の方が進数の扱いについて質問されています。
  • 具体的には、10進数として表したい時にどうすればいいのか、また8進数表記を特定の値として扱いたい時にはどうすればいいのか問題が生じているようです。
  • 質問者はこれからも同様の問題が生じる可能性があるため、アドバイスを求めています。
回答を見る
  • ベストアンサー

PHP 進数の扱い

PHPを勉強中です。 進数のマニュアルページを見ていてわからないことがあったので教えていただけませんか? 例として、 $a = 0123; // 8進数 (10進数の83と等価) とありました。 ローカル環境で試したところ、確かに変数$aは10進数で83と表示されたのですが、10進数として0123を表したい時にはどうしたらよいのでしょうか? intval(value, base)で置換するにも一度文字列として扱わなくてはならないようですが、10進数の数字として扱う方法は別にないのでしょうか? 8進数表記は0から始まるということですが、例えば「0123」の値を「123」として扱いたい!という時などが今後あるかもしれませんので、上記内容についてアドバイスいただけないでしょうか? お願いしますm==m

noname#245598
noname#245598
  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>10進数の数字として扱う方法は別にないのでしょうか? ない >例えば「0123」の値を「123」として扱いたい!という時などが今後あるかもしれません そんな可能性はない 今回の命題は定義の問題なので、たとえば「+」という記号で減算したいのですが どうしたらいいの?レベルの質問です。 どうしてもというなら質問の中身にあるとおり文字列として処理するしかありません。 <?PHP $a = (int) "0123"; print $a; ?>

noname#245598
質問者

お礼

ズバッと回答いただきまして、有難うございます。 >今回の命題は定義の問題なので 考えがずれていましたね。勉強になりました。 有難うございました。

その他の回答 (2)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>10進数として0123を表したい時にはどうしたらよいのでしょうか? ちょっと意図がわかりません。 $str = '0123'; であれば、intval($str) ですし、最初から10進と決まっているなら素直に $val = 123; と書けばいいだけです。 それとも $val = 0123; とした8進数(=83)を10進の123にしたいとうことですか? >例えば「0123」の値を「123」として扱いたい!という時などが今後あるかもしれませんので、 0123は8進表記というだけなので値として「0123」というわけではないので、意味がないと思うのですが(実際にはintegerで格納されているだけだし)。

noname#245598
質問者

お礼

>ちょっと意図がわかりません。 例えば、ユーザーに数字の入力を求めた場合、入力された値が「0123」だったとし、これを「123」として扱うにはどうするんだ?と思い質問しました。 そういえばGETやPOSTの値って全て文字列として扱っていましたね・・・。 >0123は8進表記というだけなので値として「0123」というわけではないので、意味がないと思うのですが 勉強になりました。 有難うございます。

  • tomoac
  • ベストアンサー率12% (21/168)
回答No.1

何進数でもメモリーには2進数で入っています。 それを8で割った余りが、1桁目です。割った商をさらに8で割ればその余りが2桁目。それを繰り返せばいいですね。

noname#245598
質問者

お礼

8進数の仕組みについてありがとうございました。 勉強になりました。

関連するQ&A

  • PHPの変数の渡し方

    現在以下のような位置関係のファイルでa.phpからb.phpに変数を渡したいのですが、うまく行きません。 ├dir1 │ └a.php └dir2   └b.php a.php <?php public function a(){ $value = "test"; } ?> b.php <?php public funcition b(){ print($value); } ?> phpについてwebで調べ、a.phpで$valueをglobalにしてb.phpでは 関数内でinclude('../dir1/a.php')を記述して$GLOBALS['$value']を 使ってみたのですが、うまく値がとれませんでした。 a.phpで変数をテンプレートに設定して $smarty->Set('Value', $value); それをb.phpで取得しようとしたのですが $smarty->getTemplateVars(Value); 取得する事ができませんでした。 同じようにgeTTemplateVarsを使って別のphpでは取得出来たりするのですが、 このsmartyのスコープ?というのもわかりません。 phpScheduleItというスケジュール管理のパッケージを触っていて、 php自体初めてで深い実装が全て追えていません。 勉強不足で申し訳ないのですが、何かヒントとなる事がありましたらご教示頂けますでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • php内のformのvalueに変数の値をいれたい

    どうぞよろしくお願いします。 php内のformのvalueに変数の値をいれたいのですが、下記の様に書くと<?=$a?> がそのままソースに出てしまいます。 どの様に書けば変数の値をvalueに格納できるでしょうか? <?php $a='abcd'; print'<form method="post" action="abc.php">'; print'<input type="hidden" name="a" value="<?=$a?>">'; print'</form>'; ?>

  • PHPの可変変数で数字部分を演算

    PHPの可変変数で数字部分を演算 PHPの可変変数で、 $s2010 を $year = '2010'; ${'s' . $year} で表すことができましたが、 $s2011 を ${'s'. $year+1} で表すことはできませんでした。 $year2 = $year+1; ${'s'. $year2} で表せることはわかりますが、 変数名の中で+1の演算をする表記法はないのでしょうか?

    • ベストアンサー
    • PHP
  • phpでの局所変数

    phpで、perlでいうlocalやmyのような宣言はできないのでしょうか? function a() {  if(1){   $a=2;   print "$a<br>";  }  print "$a<br>"; } としても2が2つ表示されてしまいます。 ある関数内で場所を問わず宣言したグローバル変数でない変数のスコープは、宣言場所がどこであれ、「関数内」となるのでしょうか?

    • ベストアンサー
    • PHP
  • phpのpostについて

    a.phpの値をb.phpにpostしたいのですがうまく値が渡せません post元にはname属性に変数を用いているのですがpost先でnameをどのように指定したらいいかわかりません <a.php> <form action="foo.php" method="POST"> <div id="button"> <input type="submit" name ="PostGo" value="postTime" style="margin-right:30px;" /> </div> <table> <?php for ($data = 1; $data < 5; $data++) { ?> <tr><td> <select name="test<?php echo $data?>"> <option value=1>1 <option value=2>2 <option value=3>3 <option value=4>4 </select> <?php } ?> </table></form> <b.php> <?php for($i=1;$i<5;$i++){ $test =($_POST['test']);←ここの部分のpostをどう指定したらいいかわかりません echo $test; } ?> ※$_POST['test' + $i] これでも取れませんでした

    • ベストアンサー
    • PHP
  • PHPソースファイルの文字列置換をしてから、

    PHPソースファイルの文字列置換をしてから、 そのスクリプトを実行する方法を実行しようとしている のですが、うまくいきません。 似たような質問(http://oshiete.nikkeibp.co.jp/qa5496696.html) を参考にして、文字列置換自体はうまくいったのですが、 phpファイル実行時にまったく関係の無いはずの DBアクセスでエラーが発生してしまいました。 変換前前のphpファイルに置換後の文字列を手で入れて、 データベース実行するとうまくいきます。 しかしながら、phpファイルの文字列置換をstr_replaceで実行し、別名保存した後 includeしても、うまくいかないといった状況です。 ちなみに置換後のphpファイル内で $置換後文字列 = "test"; echo $置換前文字列; とすると、置換前文字列が置換後文字列に きちんと変わっているようで、 "test"と出力されます。 もしかすると、原因は違う所に潜んでいるのかもしれませんが、 どこを調べれば良いのか検討がつかず困っております。 どなたか解決手段の分かる方がいらっしゃれば教えて頂けませんでしょうか? -------------------------------------------------------------- 尚、ファイル構成は top |-change (1.php) |-database (2.php) |-search (検索画面[データベース検索の入り口。form action ="./3.php"],3.php) |-base (4.php,5.php[tempファイル]) となっており、 それぞれの中身は 1.文字列置換実行用のphpファイル(1.php):  1-1.file_get_contentsで4のphpファイルを取得  1-2.str_replaceを用いて文字列置換  1-3.文字列置換したファイルをfwriteで4.phpと同じディレクトリに保存(5.php)  1-4.5.phpをincludeする。  1-5.5.phpをunlinkする。 2.データベースアクセス(mysql)用関数を含むphpファイル(2.php):  ↓エラーの原因と思われる関数  function connect() { global $host,$user_id,$passwd,$con; $con = mysql_connect($host,$user_id,$passwd); } 置換前phpファイルを手動で文字列置換した場合には  同ファイル内で設定したglobal変数の値がきちんと格納されており、  データベース実行がうまくいきます。  置換後phpファイルでは$host等に値が格納されていないため、  データベース実行がうまくいきません。  グローバル変数の中身は同ファイル内で定義しています。 3.検索を実行した時に呼び出されるphpファイル(3.php):  3-1.include("../change/1.php"); 3-2.1.phpの関数の実行 4.文字列置換前のphpファイル(4.php): /*呼び出し元のディレクトリ位置でないとincludeに失敗する*/ 4-1.include("../database/2.php");  4-2.2.phpのデータベースアクセス関数を実行する。 5.文字列置換後のphpファイル(5.php): 3-2の1.php関数の実行により、一時的に生成される。

    • ベストアンサー
    • PHP
  • PHPでgrepする件について

    PHPでgrepっぽいようなことをしたいと考えています。 I.「キーワード」を含む文を拾ってくる。 II.「タグ」で囲まれている数字を拾ってくる。 例えば、 I.では「北海道」を含む文章を拾ってきたいと考えています。 (日本語です。キーワードは英語ではありません) II.ではxmlで表記されている<~~>98765</~~>という98765を拾ってきたいと考えています。 http://jp2.php.net/manual/ja/function.preg-grep.php を参考にしたのですが、ダメでした。 よろしければ、助言いただけないでしょうか?

    • ベストアンサー
    • PHP
  • PHPの設定について

    よろしくお願いします。 先日、自宅サーバでアパッチとphpの4.3をインストールしました。 で、ローカルで試したところ、他は普通に動くのですが、変数を受け取りません。 たとえば <?php echo $test; ?> と記述したPHPをtest.phpとしてサーバフォルダにおき、 ブラウザでhttp://localhost/test.php?test=abc を見ても真っ白の画面になります。 同様に <form action="test.php" method="post"> (getでも試しました) <input type="text" name="test"> <input type="submit" value="送信"> </form> といったようにmethodで送っても真っ白な画面のままです。 次に test.phpを <?php if( $test == abc ){ echo "OK"; }else{ echo "NG"; } ?> とやってみて試しましたが結果はNGでした。 どうやら変数を受け取ってないらしいです。 phpのセキュリティを変更したらよいとの記事を見つけたのでそういう関係サイトを検索してみたのですが、それらしき内容を見つけられませんでした。 どなたかご教授お願いします。

    • 締切済み
    • PHP
  • n進数を10進数に変換するプログラムがわかりません

    整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム 関数void base2dec(int n, string digits, int &dec)を使用する 実行例 110101(2)=53 123(8)=83 7ACE(16)=31438 以下はとりあえずつくったみたプログラムです #include<iostream> #include<string> using namespace std; void base2dec(int n, string digits, int &dec) { int i,x=0; for(i=0; i=digits.size()-1; i++) { if(n<10) { x=digits[i]-'0'; } else { x=digits[i]-'A'+10; } dec=(x*n); if(cin >> digits[i++]) { if(n<10) { dec=dec+(digits[i++]-'0'); } else { dec=dec+(digits[i++]-'A'+10); } } } int value = dec; } int main() { int n,value; string digits; cout << "何進数ですか-->"; cin >>n; cout << "数字列を入力してください-->"; cin >>digits;; base2dec(n,digits,value); cout << digits << "(" << n << ")=" << value << endl; return 0; } void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。ちなみにn進数から10進数に直す方法は理解しています。

  • PHPで余りを求めるには

    いつも大変お世話になっております。 PHPで余りを求めたいのですが、うまく計算できません。 下記の数字を『%』で余りを求めてみました。 12069097343 と 79811665258 を数字で計算します。 手計算だと、 12069097343は余りが2、 79811665258が余りが3 のはずなのですが、プログラムで計算すると全く狂います。 print 12069097343%7; print 79811665258%7; と表示させると、両方とも『-3』を表示します。 なぜマイナス表記で、数字も違っているのかわかりません。 上記数字を変数に格納してから計算してみました。 $number1 = "12069097343"; $number2 = "79811665258"; print $number1%7; print $number2%7; すると、今度は両方とも『1』を表示しました。 何が問題なのかさっぱりわかりません。 何卒、ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • PHP