byte和hexstring,int,string等的转换类
public class HexConversion {
/**
* 16进制数的字符串转字节数组(16进制转字节数组)
*
* @param hexString
* 16进制字符串
* @return 字节数组
*/
public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
public static String bytesToString(byte[] bytes){
int size=0;
for(int i=0;i<bytes.length;i++){
if(bytes[i]!=0){
size++;
}else{
break;
}
}
byte[] data=new byte[size];
System.arraycopy(bytes, 0, data, 0, size);
return new String(data);
}
/**
* 字符转字节
*
* @param c
* 字符
* @return byte 字节
*/
private static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}
/**
* 字节转16进制字符串
*
* @param src
* 字节数组
* @return 16进制字符串
*/
public static String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
/**
* 字节转整型
*
* @param b 字节数组
* @return int型
*/
public static int byte2Int(byte[] b) {
int intValue = 0;
for (int i = 0; i < b.length; i++) {
intValue += (b[i] & 0xFF) << (8 * (3 - i));
//System.out.print("intvalue --- "+intValue+" ");
}
return intValue;
}
public static long dowrd2Long(byte[] bytes) {
long unsignedLong=0;
for(int i=0;i<bytes.length;i++){
unsignedLong=(long)(unsignedLong|(0x000000FF & ((int) bytes[i]))<<(8*i));
}
return unsignedLong;
}
public static long byteTranLong(byte[] b) {
long value = 0;
for (int i = 0; i < b.length; i++) {
value += (b[i] & 0xFF) << (8 * (3 - i));
}
return value;
}
/**
* 整形转字节数组
*
* @param num
* 整形
* @return 字节数组
*/
public static byte[] int2bytes(int num) {
byte[] b = new byte[4];
//int mask = 0xff;
for (int i = 0; i < 4; i++) {
b[i] = (byte) (num >>> (24 - i * 8));
}
return b;
}
/**
* 把4字节的数组转换成IP
*
* @param bytes
* 4个字节的字节数组
* @return 字符串IP地址
*/
// public static String bytes2Ip(byte[] bytes) {
// String ip = "";
// for (int i = 0; i < 4; i++) {
// String tmp = String.valueOf(bytes[i]);
// if (bytes[i] < 0) {
// tmp = String.valueOf(127+Math.abs(bytes[i]));
// }
//
// if (i < 3) {
// ip += tmp + ".";
// } else {
// ip += tmp;
//
// }
// }
// return ip;
// }
public static String bytes2Ip(byte[] bytes) {
String ip = "";
for (int i=0;i<bytes.length;i++) {
int inval = 0;
inval += (bytes[i] & 0xFF);
ip += inval + ".";
}
ip = ip.substring(0, ip.length() - 1);
return ip;
}
/**
* IP地址转换字节数组
*
* @param ip
* 字符串
* @return 字节数组
*/
public static byte[] ip2Bytes(String ip) {
String[] ips = ip.split("[.]");
byte[] ipbs = new byte[4];
// IP地址压缩成4字节,如果要进一步处理的话,就可以转换成一个int了.
int j = 0;
for (int i =0;i<ipbs.length;i++) {
int m = Integer.parseInt(ips[j]);
ipbs[i] = (byte) (m & 0xFF);
j++;
// byte b = (byte) m;
// if (m > 127) {
// b = (byte) (127 - m);
// }
// ipbs[i] = b;
}
return ipbs;
}
/**
* 字节数组转字符串
*
* @param bytes
* 字节数组/不足位补0的字节数组
* @return 字符串
*/
public static String bytes2String(byte[] bytes) {
int beginIndex = 0;
int endIndex=0;
int length=0;
// 判断是否补过0
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] != 0) {
beginIndex=i;
break;
}
}
for (int i = bytes.length-1; i >=0; i--) {
if (bytes[i] != 0) {
endIndex=i;
break;
}
}
if(endIndex<=beginIndex){
length=0;
}else{
length=endIndex-beginIndex+1;
}
if(length==0){
return "";
}
byte[] b=new byte[length];
System.arraycopy(bytes, beginIndex, b, 0, length);
return new String(b);
}
public static void main(String[] args) {
}
}
byte和hexstring,int,string等的转换类的更多相关文章
- C# Enum,Int,String的互相转换 [转]
C# Enum,Int,String的互相转换 Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名 ...
- (转)C# Enum,Int,String的互相转换 枚举转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...
- C# Enum,Int,String的互相转换 枚举转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...
- C# Enum,Int,String的互相转换
版权声明:本文为博主原创文章,未经博主允许不得转载. Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已 ...
- 【转】C# Enum,Int,String的互相转换 枚举转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...
- (转)C# Enum,Int,String的互相转换 枚举转换--非常实用
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...
- Enum,Int,String的互相转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基类 ...
- C++ char float int string 之间的转换
string str = "123"; string 转 int int i = atoi( str.c_str() ); string 转 float float f = ato ...
- go package 学习笔记 —— strconv(string与其他基本数据类型(int, float, bool)的转换)
strconv实现了go中基本数据类型与string之间的转换. How to use in go go doc:https://godoc.org/strconv import "strc ...
随机推荐
- ubuntu下svn使用指南
ubuntu下安装subversion客户端: sudo apt-get install subversion subversion-tools 详细请看 http://www.subversion. ...
- 推荐个好东西swoole,php如虎添翼
Swoole:PHP语言的异步.并行.高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列 ...
- Android Activity生命周期以及Fragment生命周期的区别与分析
Android Fragment生命周期图: Activity生命周期图: 对照图: Fragment生命周期分析: 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach() ...
- 使用Polly让程序有Retry的机制
有时候我们需要调用其他API的时候出现暂时连接不通超时的情况,那这时候可以通过Polly进行Retry. 1.从nuget引用polly, 2.定义需要处理的异常有哪些,比如 Policy.Handl ...
- Oracle 分区表的统计信息实例
ORACLE的统计信息在执行SQL的过程中扮演着非常重要的作用,而且ORACLE在表的各个层次都会有不同的统计信息,通过这些统计信息来描述表的,列的各种各样的统计信息.下面通过一个复合分区表来说明一些 ...
- Maven学习随记
慕课网视频教程:http://www.imooc.com/learn/443 ====Maven是什么 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件 ...
- linux设备驱动层次
USB 采用树形拓扑结构,主机侧和设备侧的USB 控制器分别称为主机控制器(HostController)和USB 设备控制器(UDC),每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设 ...
- 菜鸟学习Struts——总结
一.原理 客户端请求到ActionSeverlet,ActionSeverlet负责截URL进行分发分发到每一个Action上,Action负责和Model打交道然后把相关信息返回到ActionSev ...
- SQLite判断某表是否存在
SQLite判断表是否存在:其实很简单,只要查看sqlite_master表中是否存在这条数据就可以知道了.SELECT count(*) FROM sqlite_master WHERE type= ...
- oracle 11g 表空间使用率
Oracle数据库表空间使用量查询: select b.file_name 物理文件名,b.tablespace_name 表空间,b.bytes/1024/1024 大小M,(b.bytes-sum ...