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. 配置maven默认jdk版本

    1.在setting.xml中配置.对所有通过该配置文件构建的maven项目有效. <profile> <id>jdk-1.8</id> <activatio ...

  2. 再谈 tp的 实例化 类 的自动加载

    表示一个域名下的所有/任何主机 使用 的格式是: [*.] example.com 其中 , example.com叫着 裸域名. (这个example.com/net/org不能被注册, 被保留) ...

  3. 题解——HDU 2089 不要62(数位DP)

    最近在学数位DP 应该是入门题吧 设\( dp[i][0/1] \)表示到第\( i \)位时,前一位是否是6的满足条件的数的个数 然后就是套路 注意\( limit \)的限制条件以及转移时候信息的 ...

  4. 论文笔记之:Graph Attention Networks

    Graph Attention Networks 2018-02-06  16:52:49 Abstract: 本文提出一种新颖的 graph attention networks (GATs), 可 ...

  5. (zhuan) Variational Autoencoder: Intuition and Implementation

    Agustinus Kristiadi's Blog TECH BLOG TRAVEL BLOG PORTFOLIO CONTACT ABOUT Variational Autoencoder: In ...

  6. [CodeForces - 919B] Perfect Number

    题目链接:http://codeforces.com/problemset/problem/919/B AC代码: #include<cstdio> using namespace std ...

  7. 用RAR将多个文件夹一次性压缩为多个对应zip文件

    选中要压缩的所有文件夹.右键,选“添加到压缩文件...”,弹出的菜单如下图: 点击菜单栏“文件”.在“把每个文件都单独压缩文件中”选中,才可以单独创建压缩.如下图

  8. Redis,Memcache比较

    简单比较: Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储.memcache只支持简单的K/V类型数据, 不过memcache可以缓存其他东西如图片, ...

  9. error: pcap library not found! 解决方法

    参考: error: pcap library not found! error: pcap library not found! 解决方法 $ sudo apt-get install libsql ...

  10. pitch, yaw, roll

    在航空中,pitch, yaw, roll下图所示. pitch是围绕X轴旋转,也叫做俯仰角. yaw是围绕Y轴旋转,也叫偏航角. roll是围绕Z轴旋转,也叫翻滚角.