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等的转换类的更多相关文章

  1. C# Enum,Int,String的互相转换 [转]

    C# Enum,Int,String的互相转换 Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名 ...

  2. (转)C# Enum,Int,String的互相转换 枚举转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  3. C# Enum,Int,String的互相转换 枚举转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  4. C# Enum,Int,String的互相转换

    版权声明:本文为博主原创文章,未经博主允许不得转载. Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已 ...

  5. 【转】C# Enum,Int,String的互相转换 枚举转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  6. (转)C# Enum,Int,String的互相转换 枚举转换--非常实用

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  7. Enum,Int,String的互相转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基类 ...

  8. C++ char float int string 之间的转换

    string str = "123"; string 转 int int i = atoi( str.c_str() ); string 转 float float f = ato ...

  9. go package 学习笔记 —— strconv(string与其他基本数据类型(int, float, bool)的转换)

    strconv实现了go中基本数据类型与string之间的转换. How to use in go go doc:https://godoc.org/strconv import "strc ...

随机推荐

  1. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  2. Git使用- 基本命令

    $ git config --global user.name "Your Name"   全局 name 设置 $ git config --global user.email ...

  3. webstorm 配置scss的问题

    第一种方法(ruby方法) 先安装ruby,在windows/system32目录下 1.先查询源是什么 gem sources 2.移除原有的源头 gem sources -r http://xxx ...

  4. 刷固件Layer1到手机FLASH(硬刷)

    开头: 注意:本文章并不是做GSM 嗅探必须的,平时我们刷机叫软刷是刷到内存里面的,断电就消失了,这个是硬刷,刷到flash里面的,断电不消失,开机就运行的. 本文章经过作者实测可行,这只是单个应用程 ...

  5. Android实例-拍摄和分享照片、分享文本(XE8+小米2)

    结果: 1.分享文本不好使,原因不明.有大神了解的,请M我,在此十分感谢. 2.如果想支持图片编辑,将Action事件的Editable改为True. 相关资料: 官网地址:http://docwik ...

  6. C++异常(exception)第三篇-------如何释放资源(没有finally语句)

    问题: C++中没有finally,那么应该在哪里关闭资源? C++的try{}catch(){},为什么没有finally{}块来释放资源? 如类中的一个方法,局部变量 File * file=NU ...

  7. 设置node服务器的端口及运行环境

    一般来说,node服务器中通常会看到这样的代码: ``` app.set('port', process.env.PORT || 3000); if ( process.env.NODE_ENV == ...

  8. Linux-vim学习入门

    1.前言     vi/vim是linux中很重要的文本编辑器.我第一次使用这个编辑器时,很不习惯,甚至都不知道如何移动光标和插入字符.慢慢地经过学习,才知道如何使用vi/vim.     vi/vi ...

  9. 从LINQ开始之LINQ to Objects(下)

    前言 上一篇<从LINQ开始之LINQ to Objects(上)>主要介绍了LINQ的体系结构.基本语法以及LINQ to Objects中标准查询操作符的使用方法. 本篇则主要讨论LI ...

  10. while循环与 for循环

    import turtle turtle.setup(600,400,0,0) turtle.bgcolor('red') turtle.color('yellow') turtle.fillcolo ...