ホームページ > バックエンド開発 > PHPの問題 > PHPをバイナリに変換する方法

PHPをバイナリに変換する方法

藏色散人
リリース: 2023-03-05 13:54:01
オリジナル
4875 人が閲覧しました

php をバイナリに変換する方法: 最初に PHP サンプル ファイルを作成し、次に StrToBin メソッドを定義し、次に unpack メソッドを通じて文字列を解析し、最後に「base_convert」関数を通じてバイナリに変換します。

PHPをバイナリに変換する方法

推奨: 「PHP ビデオ チュートリアル

PHP 文字列からバイナリへの変換

インターネット上で文字列をバイナリに変換する方法を見つけました (関連する問題の説明と問題点は次のコードにあります。辛抱強く読んでください、ありがとう):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

/**

* 将字符串转换成二进制

* @param type $str

* @return type

* php 中显示的字符串是多少进制的??

* 例如:$str = '你好'; // 这边的 '你好' 是什么进制数据(我知道他是字符串!)??

*/ 

function StrToBin($str){ 

    //1.列出每个字符

    // 这边的分割正则也不理解

    // (?<!^) 后瞻消极断言

    // (?!$) 前瞻消极断言

    // 看意思好像说的是:不以^开头(但是这边 ^ 又没有被转义...),不以 $ 结尾(同上)

    // 然后得到的记过就是字符串一个个被分割成了数组(郁闷)

    // 求解释

    $arr = preg_split(&#39;/(?<!^)(?!$)/u&#39;, $str); 

    //2.unpack字符 

    foreach($arr as &$v){

        /**

         * unpack:将二进制字符串解包(英语原文:Unpack data from binary string)

         * H: 英语描述原文:Hex string, high nibble first

         * 这段代码做了什么??

         */

        $temp = unpack(&#39;H*&#39;, $v); // 这边被解析出来的字符串为什么是 16进制的??

        $v = base_convert($temp[1], 16, 2); 

        unset($temp); 

    

   

    return join(&#39; &#39;,$arr); 

   

/**

* 讲二进制转换成字符串

* @param type $str

* @return type

*/ 

function BinToStr($str){ 

    $arr = explode(&#39; &#39;, $str); 

    foreach($arr as &$v){ 

        // 他做了什么??

        $v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16)); 

    

   

    return join(&#39;&#39;, $arr); 

   

echo StrToBin("php二次开发:www.php2.cc");; 

echo &#39;<br/>&#39;; 

echo BinToStr("1110000 1101000 1110000 111001001011101010001100 111001101010110010100001 111001011011110010000000 111001011000111110010001 111011111011110010011010 1110111 1110111 1110111 101110 1110000 1101000 1110000 110010 101110 1100011 1100011");

ログイン後にコピー

上記の関数はバイナリと文字列間の変換をどのように実現しているのでしょうか? ?

------セパレータ------

パックとアンパックについてはすでに知っています。ちなみに、共有させてください:

この例を使用して、私が理解していることについて話しましょう:

パックの使用法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 二进制数字 => 二进制字符串

$bin_number = &#39;这边是二进制数字&#39;;

$hex = bin2hex($bin_number );

// 由于指定了 H(16进制,高位在前),所以第二个参数需要使 16 进制字字符串

// strlen($hex) 指定打包多少个 16 进制字符串

// 也可以使用 * 来自动识别

// 结果就是:二进制字符串了

$bin_str = pack(&#39;H&#39; . strlen($hex) , $hex);

<=>

$dec = bindec($bin_number);

$hex = dechex($dec);

$bin_str = hex2bin($hex);

unpack 用法:

//  转换作用:2进制字符串 => 16进制字符串

$str = unpack(&#39;H*&#39; , &#39;陈&#39;);

<=>

$str = bin2hex(&#39;陈&#39;);

ログイン後にコピー

以上がPHPをバイナリに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート