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. 学习MFC的建议

    1.继续深入学习C++的内容,打好面向对象的程序综合设计与编程基础,参考书籍<C++Primer>. 2.打好Windows编程基础(参考书<Windows程序设计>(第五版) ...

  2. CEF 添加F5刷新快捷键

    Keyboardcodes:https://www.androidos.net.cn/android/4.3_r1/xref/external/webkit/Source/WebCore/platfo ...

  3. 解决c1xx fatal error C1083 Cannot open source file

    在项目开发过程中,遇到一个问题,一个工程B导入另外一个工程A的生产代码,出现这个错误,最后查阅资料发现是文件路径太深,导致文件路径字符超过了217字符. 写了一个测试Demo来验证: 一.新建Win3 ...

  4. topcoder srm 697 div1 -3

    1.给定长度为$n$ 的数组$b$,构造长度为$n$ 的且没有重复元素的数组$a$,令$p_{i}$表示$a$中除$a_{i}$外其他元素的乘积.构造出的$a$满足$a_{i}^{b_{i}}$能够被 ...

  5. SpringBoot 消息转换器 HttpMessageConverter

    1.简介: Spring在处理请求时,由合适的消息转换器将请求报文绑定为方法中的形参对象,在这里,同一个对象就有可能出现多种不同的消息形式,比如json和xml.同样,当响应请求时,方法的返回值也同样 ...

  6. RHEL7防火墙策略设置

    注意查看firewall防火墙状态,并设置. 打开防火墙且没有放行端口的情况下rhel7这台机器是ping不通的. 放行端口需要永久放行,加--permernant,否则重启后失效,仍然无法访问该端口 ...

  7. [转]otunnel:一个和lcx差不多的端口转发的工具

    这是一个采用Golang编写的和lcx差不多的端口转发的工具,用来突破内网环境 项目地址 ooclab/otunnel 下载地址(内涵各大平台) http://dl.ooclab.com/otunne ...

  8. hihoCoder 1233 : Boxes(盒子)

    hihoCoder #1233 : Boxes(盒子) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 There is a strange ...

  9. CSDN-markdown编辑器语法——字体、字号与颜色

     Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.但是它本身是不支持修改字体.字号与颜色等功能的!   CSDN-markd ...

  10. _itemmod_enchant_groups

    随机附魔组 附魔组 `groupId` 分组编号,同一groupId的附魔效果被随机抽取 `enchantId` 附魔Id 对应SpellItemEnchantment.dbc `chance` 被抽 ...