- ベストアンサー
pack関数
今、少しずつPHPを勉強をしているのですが、 pack関数がわかりません。 http://www.php.net/manual/ja/function.pack.php にある例 1の結果がなぜ 0x12, 0x34, 0x78, 0x56, 0x41, 0x42 のように なるのですか? またこのバイナリ文字列を普通の文字にするには どうすればいいのですか? 参考になるサイト等がありましたらこれも一緒に 教えて下さい。
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
pack関数は指定された文字列を1文字ずつのバイナリ文字列に変換しています。 ですから 0x1234は2バイトなので0x12と0x34に 65と66は両方十進数なのでそれぞれ16進数の0x41と0x42になります。 # 65は二進数で0100 0001→16進数で41 (0x5678は0x56と0x78だと思うのですが…うーん) 参考URLは私が利用させて頂いているサイトです。 kakipiさんの参考になればよいのですが…。
関連するQ&A
- PHPのpack関数をJavaで実装できるのでしょうか
PHPで文字列を16進バイナリ文字列に変換する関数であるpack関数というものがありますが、これと全く同じ動きをしてくれるメソッドがjavaには存在しないようです。これを自分で実装する方法をあれこれ考えているのですが、どうしてもうまくいきません。 下のようなメソッドを作ってみたのですが、戻ってくるのはただの数値文字列です。 /** * @param toPack バイナリへの変換対象の数値 */ String getHexBinary(int toPack){ String buf = ""; String hex = Integer.toString(toPack, 16); char decChars[] = hex.toCharArray(); for(int decChar : decChars){ buf += Integer.toHexString(decChar); } return buf; } PHPのpack関数はこの戻ってくる数値文字列を何らかの手法で結合しているように見えるのですが、その挙動が理解できずに困っています。どなたか、ご教授願えないでしょうか。ちなみに、Javaのバージョンは5.0でやっています。PHPのバージョンは5.2です。
- ベストアンサー
- Java
- ereg_match関数について
こんばんは。PHP初めて間もないド素人です。とあるサイトを参考に、バイナリセーフ関数とかいうのととそうでない関数の処理の違いを検証してみようと思い、以下のコードを試してみました。 <?php //preg_match関数がバイナリセーフ関数である事を検証する。 //正規表現文字列にマッチしない文字があれば1を返す。 $kekka=preg_match('/[^a-zA-Z0-9_]/','oh_my_god\x00@'); $kekka2=ereg_match('/[^a-zA-Z0-9_]/','oh_my_god\x00@'); print($kekka); print("<br/>"); print($kekka2); ?> <!--<html>タグがないのにいきなり<br/> とか打っても大丈夫か試してみる。 print_rと打ってみたらなにか変わるか試してみる。--> <br/> <?php print_r($kekka); ?> これを試した結果、 Fatal error: Call to undefined function ereg_match() ...... というエラーがでました。ereg_match関数についてインターネットで 調べてみたのですがヒット率が異常に悪く「もしかしてpreg_match?」 とか表示されたりもしました。今php5を使ってますが、もしかして この関数はもうなくなった関数なのでしょうか?
- ベストアンサー
- PHP
- [Perl] Pack関数について教えてください。
こんにちは。 下記は、pack関数のサンプルスクリプトですが、 なんでそのような結果になるのか、よくわかりません。どなたか教えていただけますか。 print "文字列を入力してください:"; $string = <STDIN>; chomp ($string); $length = length($string); print "数値を入力してください:"; $number = <STDIN>; chomp ($number); # Do Pack! $packed = pack("A${length}i", $string, $number); print "パック文字列: $packed\n"; --- 結果 --- 文字列を入力してください:perl 数値を入力してください:100 パック文字列: perl
- ベストアンサー
- Perl
- pack("C",0x61).pack("C",0x62)...を省略
$_=pack("C",0x61).pack("C",0x62).pack("C",0x68)... こういったバイナリ文字列をもっと簡単に$_=0x61.0x62.0x68のように書けませんか? $_=0x61.0x62.0x68ではうまくいきませんでした。
- ベストアンサー
- Perl
- gettype関数 で型チェックをしたら何故ダメ?
>型のチェックには、この関数ではなく is_* 関数を使います ▽PHP: gettype - Manual http://php.net/manual/ja/function.gettype.php て書いているのですが、gettypeはなんで利用してはいけないのでしょうか?(もしくは奨励されていないのでしょうか) is_numeric() とか、とっても難しそうなのですが…
- ベストアンサー
- PHP
- PHPのfopen関数について質問です。
PHPマニュアル http://www.php.net/manual/ja/function.fopen.php 上記ページの >> Windows ベースのシステムでは \r\n を使用します。 マッキントッシュベースのシステムでは \r を使用します。 間違った改行コードでファイルに書き込むと、 他のアプリケーション上でそのファイルを開いた際に変な風に見えてしまいます。 Windows上では、\nを\r\nに透過的に変換する text-mode変換フラグ('t')が提供されます。 それに対し、'b'を使って強制的にバイナリモードにすることもできます。 その場合データの変換はされません。 このフラグを使用するには、'b' または 't'を mode引数の最後に追加してください。 とある様にPHPにおいてfopen関数の第二引数のモードに付加する場合のバイナリモードとは windows系プラットフォームにおいて書き込む文字列内に[¥n]というバイトがあった場合、プラットフォームにあわせて 自動的に書き出す際に¥r¥nに変換されるから・・・・。 という意味ですよね。 例えば、あるバイナリファイルに奇跡的に[¥n]というバイトがなかった場合、fopen("test.jpg","rw");でもよいということですよね?
- ベストアンサー
- PHP
- phpマニュアルの検索機能が機能しない件
ど素人がphpを勉強中です。 関数の意味を調べたい時、 http://www.php.net/manual/ja/indexes.php 上記、関数マニュアル一覧から、Ctrl+Fの検索で、例えば『implode』で検索してみても、 http://php.net/manual/ja/function.implode.php このページが見つかりません。 わざわざGoogleから検索しないと出てきません。 とても不便です。 どうしたらいいでしょうか?
- ベストアンサー
- PHP
- header() 関数が必要になる場面は?
http://php.net/manual/ja/function.header.php にheader() 関数の使い方が説明されていますが、 生の HTTP ヘッダを送信するというのは、オートで送信されているのを カスタマイズしてサーバーの動きを操作するということですよね。 この関数を利用するのは、どういった場合に必要になるのでしょうか。
- ベストアンサー
- PHP
- 正規表現で文字列を区切りたい
PHPで、正規表現で文字列を分割する方法がわかりません。 やりたいことは、 1|ねこ|2|こあら|3|りす という文字列を、 1|ねこ 2|こあら 3|りす というように、直前の文字が数字でない|で区切りたいです。 区切るための関数は、mb_splitを考えています。 http://php.benscom.com/manual/ja/function.mb-split.php 調べていて、以下のページに書かれている話が近いのかなと思うのですが、 そこで述べられている正規表現の仕組みがよく分からないでいます。 http://okwave.jp/qa1849763.html ご教示よろしくお願いします。
- ベストアンサー
- PHP
お礼
お返事大変遅くなりすみませんでした。 おかげさまでなんとか理解できそうです。 ありがとうございました。