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. 尝试解决cifar10问题

    我理解这个问题和猫狗的不同,在于将2类扩展为10类,其它的地方我准备采用相同的方法. 注意事项: 1.我要用kaggle的数据集,而不是用其它的数据集: 2.最终得到的结果要以test为导向: 1.先 ...

  2. 基础_cifar10_model

    今天进一步在cifar10数据集上解决几个问题: 1.比较一下序贯和model,为什么要分成两块: 2.同样的条件下,我去比较一下序贯和model.这个例子作为今天的晚间运行. 1.比较一下序贯和mo ...

  3. STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  4. [内核驱动] VS2012+WDK 8.0 Minifilter实现指定扩展名文件拒绝访问

    转载:http://blog.csdn.net/C0ldstudy/article/details/51585708 转载:http://blog.csdn.net/zj510/article/det ...

  5. Jenkins 总结

    步骤: 1,安装Jenkins 2,运行Jenkins: java -jar jenkins.war --httpPort=8888 httpPort指的就是Jenkins所使用的http端口,这里指 ...

  6. 前缀判断|2013年蓝桥杯B组题解析第五题-fishers

    前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 &quo ...

  7. (转)Shiro学习

    (二期)13.权限框架shiro讲解 [课程13]自定义Realm.xmind36.8KB [课程13]用户授权流程.xmind0.2MB [课程13]shiro简介.xmind0.3MB [课程13 ...

  8. 比赛总结——atcoder beginner contest 109

    第一次AK的ABC 虽然题非常简单 但是值得纪念一下 T1 一道很水的题 不存在做法 纯粹乱跑 但是我把Yes打成YES了,哭唧唧 #include <cstdio> #include & ...

  9. 《剑指Offer 1.二维数组中的查找》2019-03-25

    剑指Offer  第一题 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...

  10. trackViewer 氨基酸位点变异位置图谱展示

    内容中包含 base64string 图片造成字符过多,拒绝显示