• PHP 字符串和字节序列互相转换 []byte<=>string


    最近学习golang,发现字节数组 []byte 用的很多,但是在PHP中却很少看到,我就在想PHP中如何实现字节数组和字符串的转换,
    一番试验下来发现方法还挺多的,记录一下
    方法都很简单,直接看代码就行了

    <?php
    
    function test()
    {
        //测试数据
        $testData = ["你好", "abc"];
        foreach ($testData as $bin) {
            $byte1 = tobyte3($bin);
            $byte2 = tobyte2($bin);
            $byte3 = tobyte1($bin);
    
            echo 'tobyte1: [' . implode(",", $byte1) . ']' . PHP_EOL;
            echo 'tobyte2: [' . implode(",", $byte2) . ']' . PHP_EOL;
            echo 'tobyte3: [' . implode(",", $byte3) . ']' . PHP_EOL;
    
            echo 'unbyte1: ' . unbyte1($byte1) . PHP_EOL;
            echo 'unbyte2: ' . unbyte2($byte2) . PHP_EOL;
            echo 'unbyte3: ' . unbyte3($byte3) . PHP_EOL;
        }
    }
    
    function tobyte1($str)
    {
        return unpack("C*", $str);
    }
    
    function tobyte2($str)
    {
        $res = [];
        //$len = mb_strlen($str, "8bit"); //这个方法也可以
        $len = strlen($str);
        for ($i = 0; $i < $len; $i++) {
            $res[] = ord($str[$i]);
        }
        return $res;
    }
    
    function tobyte3($str)
    {
        $hex = bin2hex($str);
        $res = str_split($hex, 2);
        foreach ($res as &$re) {
            $re = hexdec($re);
        }
        unset($re);
        return $res;
    }
    
    function unbyte1($bytes)
    {
        return pack("C*", ...$bytes);
    }
    
    function unbyte2($bytes)
    {
        $str = "";
        foreach ($bytes as $byte) {
            $str .= chr($byte);
        }
        return $str;
    }
    
    function unbyte3($bytes)
    {
        $str = "";
        foreach ($bytes as $byte) {
            $str .= dechex($byte);
        }
        return hex2bin($str);
    }
    
    //运行测试
    test();
    
    //输出结果
    
    // tobyte1: [228,189,160,229,165,189]
    // tobyte2: [228,189,160,229,165,189]
    // tobyte3: [228,189,160,229,165,189]
    // unbyte1: 你好
    // unbyte2: 你好
    // unbyte3: 你好
    // tobyte1: [97,98,99]
    // tobyte2: [97,98,99]
    // tobyte3: [97,98,99]
    // unbyte1: abc
    // unbyte2: abc
    // unbyte3: abc

    tobyte 方法 将字符串转为字节序列 对应 golang 里面的 []byte("xxxx")
    unbyte 方法将字节序列转字符串 对应 golang 里面的 string([]byte{})

    上面三种方法中,我推荐使用pack和unpack的方式, 这两个函数在处理网络传输数据时功能强大,后面还要专门研究一下

  • 相关阅读:
    代码
    怎么创建scrollview
    tcp/Ip http
    游戏道具
    FPS interv
    调整音乐
    插入排序
    冒泡排序
    JSON详解
    设计模式系列(2) 工厂模式之简单工厂模式
  • 原文地址:https://www.cnblogs.com/codeAB/p/16021879.html
Copyright © 2020-2023  润新知