0

substr()正規表現からの一致の使用に問題があります( preg_match()-を使用すると一致$aの配列が含まれます)。

エコーするとき、a[1]それは等しく0xe84、文字列です(私が使用してチェックしたようにgettype())。

substr($file, $a[2], $a[1]); //not working...

しかし、私がそうする場合(3番目のパレムは正規表現からの一般的なものであるため、実際にはこれを行うことができないことに注意してください-これは私の問題を説明するために使用されています):

substr($file, $a[2], 0xe84); //works fine - when entering the match directly as an integer

だから私の質問は、なぜsubstr()3番目のパラメーターが整数型の場合にのみ機能するのか、そしてどのように$a[1]整数を作成して正常に機能するのかということです。

私は型キャスト(を使用して(int))を実行しようとしましたが、を使用intval()するだけでなく、を使用しsettype(integer)ましたが$a[1]$a[1]その後になります0(そして機能しsubstr()ません)。

4

2 に答える 2

1

'0xe84'は 16 進文字列で、10 進数で 3716 です。次を使用して整数に変換できますhexdec

substr($file, $a[2], hexdec($a[1]));

引用符なしで渡すと機能する理由0xe84は、php が 16 進リテラルを正しく解釈するためです。ただし、 string として使用すると 16 進数として認識されません'0xe84'

于 2011-01-06T21:33:18.687 に答える
0

安全なコードとして、intval関数を使用して整数値を取得できます。

substr($file, $a[2], intval($a[1],16));

intvalの2番目のパラメーターはベースを意味します。ここではHEXを使用しています

NiLよろしく

于 2011-01-06T21:35:50.997 に答える