php解析处理java的btye字节;php解析处理java的ByteArrayOutputStream字节流/数据流

一般java的字节流: 就是t

public class Test {

    public static void main(String[] args) {
String s = "好好学习,天天向上";
byte[] b = s.getBytes();
ByteArrayInputStream bai = new ByteArrayInputStream(b);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
int t = bai.read();
while (t != -1) {
bao.write(t);
t = bai.read();
}
System.out.println(bao);// 调用toString的方法
}
}

PHP是弱类型语言,不像java 有这么多数据类型。这里要讲到的就是一个byte

大家知道在java中把字符串变成byte数组很简单,譬如

String a=”你好”;

byte[] bb = a.getBytes(“UTF-8”);  //注意编码

在PHP中并没有直接的函数,如果在PHP中需要把字符串变成类似byte数组需要这样

function getBytes($string) {  
        $bytes = array();  
        for($i = 0; $i < strlen($string); $i++){    //遍历每一个字符 用ord函数把它们拼接成一个php数组
             $bytes[] = ord($string[$i]);  
        }  
        return $bytes;  
    }

ord函数是干球用的?

ord() 函数返回字符串第一个字符的 ASCII 值

同样把刚才生成的数组再恢复过去可以这么干

function toStr($bytes) {  
        $str = ”;  
        foreach($bytes as $ch) {  
            $str .= chr($ch);    //这里用chr函数
        }  
           return $str;  
    }  
chr函数是干球用的?

chr() 函数从指定的 ASCII 值返回字符。 这个函数正好和ord相反

好,问题又来了。 在java 中可以把一个十进制数字强制转换为byte型。譬如

(byte)227  .这个值是:-29 。 (在java中把227强制转换为227只要一句话,So easy。 但这些正是像php这样语言的弱项。也许作者并不希望大家用php完成一些“匪夷所思的功能”,做网站就老老实实做网站,玩啥byte啊)

大家如果做过各种第三方平台的token验证等功能可能会用到。这里先解释一下java 在做 byte强制转换时的一些过程(由于太懒,其过程从百度里抄抄弄弄的,懒得写)

扫盲开始:

1、因为byte占8个bit位.int占32个bit位,将int转成byte相当与强制截取int的二进制数的后8位,由于多余的部分byte空间装不下,因此干掉多余部分,取其后8位b位 转成10进制的值就是结果,

2、如果截下来的8位数的第一位(从左往右,术语叫做高位)是1,表示此数是负数,那么最终的结果就是 把这8位先转为十进制数然后再减去256就是最终的值

3、相反如果高位是0,代表正数,那么直接把这8位转为十进制数就是这个byte货色的结果

那么在php中怎么实现呢?其实了解原理和掌握几个函数后就能自己来完成

function toByte($num) //$num 可以传数字
{
    $num=decbin($num);  //decbin 是php自带的函数,可以把十进制数字转换为二进制

$num=substr($num,-8); //取后8位
    $sign=substr($num,0,1); //截取 第一位 也就是高位,用来判断到底是负的还是正的
    if($sign==1)  //高位是1 代表是负数 ,则要减去256
    {
        return bindec($num)-256; //bindec 也是php自带的函数,可以把二进制数转为十进制
    }
    else
    {
        return bindec($num);
    }
}

大家可以分别在php和java中测试一下。 toByte(227) 和java中的 (byte)227 是否一样呢?

如果大家在开发一些BAT的各种无节操的API接口,涉及到一些权限验证啥的 都会用到这些玩意儿。

http://www.hishenyi.com/archives/178

php解析处理java的btye字节;php解析处理java的ByteArrayOutputStream字节流/数据流的更多相关文章

  1. java编译后字节码解析

    java编译后字节码解析 参考网摘: https://my.oschina.net/indestiny/blog/194260

  2. 命令查看java的class字节码文件、verbose、synchronize、javac、javap

    查看Java字节码 1 javac –verbose查看运行类是加载了那些jar文件 HelloWorld演示: public class Test { public static void main ...

  3. 100+经典Java面试题及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  4. 知名互联网公司校招 Java 开发岗面试知识点解析

    天之道,损有余而补不足,是故虚胜实,不足胜有余. 本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几 ...

  5. 《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的

    概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而 ...

  6. JAVA方法调用中的解析与分派

    JAVA方法调用中的解析与分派 本文算是<深入理解JVM>的读书笔记,参考书中的相关代码示例,从字节码指令角度看看解析与分派的区别. 方法调用,其实就是要回答一个问题:JVM在执行一个方法 ...

  7. Java 虚拟机面试题全面解析(干货)

    Java 虚拟机面试题全面解析(干货) JDK 是什么 JRE 是什么 Java历史版本的特性 Java Version SE 50 Java Version SE 6 Java Version SE ...

  8. Java虚拟机--虚拟机字节码执行引擎

    Java虚拟机--虚拟机字节码执行引擎 所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果. 运行时栈帧结构 用于支持虚拟机进行方法调用和方 ...

  9. Java面试知识点总结及解析

    声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入.本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题目 ,知识面很广 ,而且这位前辈对于每个 ...

随机推荐

  1. css 元素居中

    css 4种常见实现元素居中的办法: 1.通过 margin 属性调整 : { position: absolute; top: 50%; left: 50%; margin-left: 盒子的一半: ...

  2. python第一阶段总结(1)

    python3第一阶段的总结 首先申明一下,本人是看网络课程“老男孩”过来写博客的,想把自己学到的东西分享一下.同时给老男孩打个广告,其教学水平真的挺好的.仅据我个人多年的学习评价. 好,接下来是我对 ...

  3. 【原理、命令】Git基本原理、与Svn的区别、命令

    一.Git是什么? Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程:Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote ...

  4. mysql中创建时间和更新时间的区别

    `create_time` ) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` ) ) COMMENT '更新时间', 而在界 ...

  5. 什么是SpringCloud

    SpringCloud是在SpringBoot的基础上构建的,用于简化分布式系统构建的工具集. 该工具集为微服务架构中所涉及的配置管理,服务发现,智能路由,断路器,微代理和控制总线等操作 提供了一种简 ...

  6. kubernetes 实战4_命令_Configure Pods and Containers

    Configure Service Accounts for Pods A service account provides an identity for processes that run in ...

  7. POJ 3279 Fliptile(翻格子)

    POJ 3279 Fliptile(翻格子) Time Limit: 2000MS    Memory Limit: 65536K Description - 题目描述 Farmer John kno ...

  8. 自定义标签TLD文件中,rtexprvalue子标签的意思

    rtexprvalue的全称是 Run-time Expression Value, 它用于表示是否能够利用JSP表达式. 举例子: 1.定义一个TLD文件: <tag> <name ...

  9. HDU3377 Plan

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3377 简单路径要求权值最大,那么为了回避括号序列单独插头的情况特判多,考虑使用最小表示法. #incl ...

  10. Educational Codeforces Round 3 E. Minimum spanning tree for each edge 最小生成树+树链剖分+线段树

    E. Minimum spanning tree for each edge time limit per test 2 seconds memory limit per test 256 megab ...