前言:用于处理Java基本数据的转换及进制转换操作工具

一、实现功能

1、int与byte互转

2、int与byte[]互转

3、short与byte互转

4、short与byte[]互转

5、16位short与byte[]互转

6、long与byte[]互转

7、byte[]与inputstream互转

8、byte与String互转

9、16进制字符转int

10、十进制转2进制

11、byte[]转16进制字符

12、byte[]数组指定位置抽取byte[]

二、代码实现

package cc.eguid.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
/**
* 基本数据互转工具
* @author eguid
* eguid的官网:www.eguid.cc
* eguid的csdn博客:http://blog.csdn.net/eguid_1,博客园:http://www.cnblogs.com/eguid
*/
public class ByteUtil {
private static ByteBuffer buffer = ByteBuffer.allocate(8);
/**
* int转byte
* @param x
* @return
*/
public static byte intToByte(int x) {
return (byte) x;
}
/**
* byte转int
* @param b
* @return
*/
public static int byteToInt(byte b) {
//Java的byte是有符号,通过 &0xFF转为无符号
return b & 0xFF;
} /**
* byte[]转int
* @param b
* @return
*/
public static int byteArrayToInt(byte[] b) {
return b[3] & 0xFF |
(b[2] & 0xFF) << 8 |
(b[1] & 0xFF) << 16 |
(b[0] & 0xFF) << 24;
}
public static int byteArrayToInt(byte[] b, int index){
return b[index+3] & 0xFF |
(b[index+2] & 0xFF) << 8 |
(b[index+1] & 0xFF) << 16 |
(b[index+0] & 0xFF) << 24;
}
/**
* int转byte[]
* @param a
* @return
*/
public static byte[] intToByteArray(int a) {
return new byte[] {
(byte) ((a >> 24) & 0xFF),
(byte) ((a >> 16) & 0xFF),
(byte) ((a >> 8) & 0xFF),
(byte) (a & 0xFF)
};
}
/**
* short转byte[]
*
* @param b
* @param s
* @param index
*/
public static void byteArrToShort(byte b[], short s, int index) {
b[index + 1] = (byte) (s >> 8);
b[index + 0] = (byte) (s >> 0);
}
/**
* byte[]转short
*
* @param b
* @param index
* @return
*/
public static short byteArrToShort(byte[] b, int index) {
return (short) (((b[index + 0] << 8) | b[index + 1] & 0xff));
}
/**
* 16位short转byte[]
*
* @param s
* short
* @return byte[]
* */
public static byte[] shortToByteArr(short s) {
byte[] targets = new byte[2];
for (int i = 0; i < 2; i++) {
int offset = (targets.length - 1 - i) * 8;
targets[i] = (byte) ((s >>> offset) & 0xff);
}
return targets;
}
/**
* byte[]转16位short
* @param b
* @return
*/
public static short byteArrToShort(byte[] b){
return byteArrToShort(b,0);
} /**
* long转byte[]
* @param x
* @return
*/
public static byte[] longToBytes(long x) {
buffer.putLong(0, x);
return buffer.array();
}
/**
* byte[]转Long
* @param bytes
* @return
*/
public static long bytesToLong(byte[] bytes) {
buffer.put(bytes, 0, bytes.length);
buffer.flip();//need flip
return buffer.getLong();
}
/**
* 从byte[]中抽取新的byte[]
* @param data - 元数据
* @param start - 开始位置
* @param end - 结束位置
* @return 新byte[]
*/
public static byte[] getByteArr(byte[]data,int start ,int end){
byte[] ret=new byte[end-start];
for(int i=0;(start+i)<end;i++){
ret[i]=data[start+i];
}
return ret;
} /**
* 流转换为byte[]
* @param inStream
* @return
*/
public static byte[] readInputStream(InputStream inStream) {
ByteArrayOutputStream outStream = null;
try {
outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
byte[] data = null;
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
data = outStream.toByteArray();
return data;
}catch (IOException e) {
return null;
} finally {
try {
if (outStream != null) {
outStream.close();
}
if (inStream != null) {
inStream.close();
}
} catch (IOException e) {
return null;
}
}
}
/**
* byte[]转inputstream
* @param b
* @return
*/
public static InputStream readByteArr(byte[] b){
return new ByteArrayInputStream(b);
}
/**
* byte数组内数字是否相同
* @param s1
* @param s2
* @return
*/
public static boolean isEq(byte[] s1,byte[] s2){
int slen=s1.length;
if(slen==s2.length){
for(int index=0;index<slen;index++){
if(s1[index]!=s2[index]){
return false;
}
}
return true;
}
return false;
}
/**
* byte数组转换为Stirng
* @param s1 -数组
* @param encode -字符集
* @param err -转换错误时返回该文字
* @return
*/
public static String getString(byte[] s1,String encode,String err){
try {
return new String(s1,encode);
} catch (UnsupportedEncodingException e) {
return err==null?null:err;
}
}
/**
* byte数组转换为Stirng
* @param s1-数组
* @param encode-字符集
* @return
*/
public static String getString(byte[] s1,String encode){
return getString(s1,encode,null);
}
//测试
public static void main(String []args){
System.err.println(isEq(new byte[]{1,2},new byte[]{1,2}));
}
/**
* 字节数组转16进制字符串
* @param b
* @return
*/
public static String byteArrToHexString(byte[] b){
String result="";
for (int i=0; i < b.length; i++) {
result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring(1);
}
return result;
} /**
* 16进制字符创转int
* @param hexString
* @return
*/
public static int hexStringToInt(String hexString){
return Integer.parseInt(hexString,16);
}
/**
* 十进制转二进制
* @param i
* @return
*/
public static String intToBinary(int i){
return Integer.toBinaryString(i);
}
}

最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类的更多相关文章

  1. Java 包装类及其与String转换、进制转换

    一.包装类 1.基本类型和引用类型 Java中的基本类型我们都知道有8种,但是作为基本类型限制功能的发挥,例如整形转String类型等可能需要类方法实现会更加简便.那么八个基本类型对应八个包装类,即引 ...

  2. java 13-4 Integer和String、int之间的转换,进制转换

    1.int类型和String类型的相互转换 A.int -- String 推荐用: public static String valueOf(int i) 返回 int 参数的字符串表示形式. B. ...

  3. Java基础复习之一篇:关健字,标识符,注释,常量,进制转换,变量,数据类型,数据类型转换

    1.关健字 1.1.被Java语言赋予特定意义的单词(如:class,interface,public ,static) 1.2.全部是小写 1.3.注意事项(goto和const作为关健字保留起来) ...

  4. Java基础笔记(3) 进制与进制转换

    ---恢复内容开始--- 进制 在一般生活中,我们一直在应用的十进制,就是逢十进一,而今天我们要接触的是,计算机编程常用的进制!首先我们要知道,计算机内部运算采用的是二进制,也就是逢二进制! 1.什么 ...

  5. java中Integer包装类的具体解说(java二进制操作,全部进制转换)

    程序猿都非常懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往须要操作Integer,或者各种进制的转换等等.我今天就为大家具体解说一下Integer的使用吧.看代码: ...

  6. Java的进制转换操作(十进制、十六进制、二进制)

    2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. ...

  7. java byte 16进制转换

    整型转16进制: int devIdInt = Integer.parseInt(devId);String devIdString = Integer.toHexString(devIdInt); ...

  8. java:数据结构(二)栈的应用(进制转换全收集)

    说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article ...

  9. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

随机推荐

  1. 如何解决chrome 等浏览器不支持本地ajax请求的问题

    XMLHttpRequest cannot load file:///D:/WWW/angularlx/ui-router-test/template/content.html. Cross orig ...

  2. 在ASP dot Net Core MVC中用Controllers调用你的Asp dotnet Core Web API 实现CRUD到远程数据库中,构建你的分布式应用(附Git地址)

    本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...

  3. HTML ——Flex弹性布局

    弹性盒布局的使用 1.为父容器添加display:flex或inline-flex属性 (Webkit内核的浏览器,必须加上-webkit前缀.) 容器默认存在两根轴:主轴(main axis)和交叉 ...

  4. linux下安编译安装redis

    1.先进入要安装到的目录,比如我要把redis安装到/usr/local/redis下,那就先进入/usr/local cd /usr/local 2.然后下载安装包,并解压 wget http:// ...

  5. phpmyadmin的初始账号密码是多少

    问这个问题,是不是有点弱智,但是这个问题确实阻塞了我那么几分钟. 实际上问题很简单,初始账号是root,密码为空

  6. idea: 纯 http 上的双向通信

    纯 http 上的双向通信 最近大概看了下 rxJava 的订阅者模式,然后突发奇想有没有可能用类似的思路实现纯 http 上的双向通信 A 是传统的 http 服务器 B 是普通的客户端,假设我们能 ...

  7. Spring Boot快速建立HelloWorld项目

    Spring Boot使我们更容易去创建基于Spring的独立和产品级的可以”即时运行“的应用和服务.支持约定大于配置,目的是尽可能快地构建和运行Spring应用. 构建环境 JDK 6+ Maven ...

  8. W10上面DOSBOX安装

    第一步:下载好MASM.exe.debug.exe.link.exe.将其放在根目录下面.我们以后自己编写的汇编代码也是在此目录下.如图: 第二步:我这里的文件夹名称是Assembly那么这个也就是待 ...

  9. (坑)django test在多线程下的问题

    问题描述: 使用django自带的test做测试,尝试去数据库中取数据,主线程中没有问题,非主线程中取不到数据. 示例代码: class MyTestCase(TestCase): def setUp ...

  10. 史上最全的njRAT通信协议分析

    Njrat,又称Bladabindi,该木马家族使用.NET框架编写,是一个典型的RAT类程序,通过控制端可以操作受控端的文件.进程.服务.注册表内容,也可以盗取受控端的浏览器的保存的密码信息等内容. ...