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 ...
随机推荐
- LevelDB:一个快速轻量级的key-value存储库(译)
作者:Jeff Dean, Sanjay Ghemawat 原文:http://leveldb.googlecode.com/svn/trunk/doc/index.html 译者:phylips@b ...
- 7)Java数据类型
Java中的数据类型分为基本数据类型和引用数据类型: 1)基础数据类型有: boolean, byte.short.char, int.float.long, dou ...
- DevExpress控件开发常用要点(项目总结版)
使用DevExpress控件来做项目开发已经有很长一段时间了,在摸索开发到客户苛刻要求的过程中,其中碰到过很多问题需要解决的,随着一个个问题的解决,也留下很多对DevExpress控件的使用经验及教训 ...
- Toast提示信息
用Toast来作为操作成功以及用户误操作等等的提示,非常的简单.直接上代码: 创建方式一: ps: 此处没有设置toast的其他属性,均使用默认的风格(个人觉得默认的风格除了字体比较小之外 还是挺好看 ...
- ARM-Linux S5PV210 UART驱动(3)----串口核心层、关键结构体、接口关系
尽管一个特定的UART设备驱动完全可以按照tty驱动的设计方法来设计,即定义tty_driver并实现tty_operations其中的成员函数,但是Linux已经在文件serial_core.c中实 ...
- Python 初学(一) 标识符
Python 标识符 在python里,标识符由字母.数字.下划线组成: python中的标识符是区分大小写的: 1)以单下划线开头(_foo)的代表不能直接访问的类属性,需要通过类提供的接口进行访问 ...
- python的http请求应用--每日签到
写点python吧,python其实是个很好用的工具,作为浇水语言,跟其他语言联系也很紧密,想用什么包直接import,导入ctypes调用底层函数库,导入web相关的包可以轻松写爬虫,今天我们写的跟 ...
- SRF之数据验证
实现表单输入数据的验证,包括客户端验证和服务器端验证 如何使用 数据验证在业务层的实体类字段上增加数据验证的特性,例如 public class User { [Required(ErrorMessa ...
- C实现辗转相除法求两个数的最大公约数
什么是辗转相除法? 辗转相除法(又名欧几里德算法),它主要用于求两个正整数的最大公约数.是已知的最古老的算法. 用辗转相除法求132和72的最大公约数的步骤: 132 / 72 = 1 ... 60 ...
- hud 2586 How far away ?
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Description There are n houses in ...