byte[]与各种数据类型互相转换示例

在socket开发过程中,通常需要将一些具体的值(这些值可能是各种JAVA类型)转化为byte[]类型,为此我总结了如下这个示例,贴出来,以便经常翻看:

public class TestCase {

	/**
	 * short到字节数组的转换.
	 */
	public static byte[] shortToByte(short number) {
		int temp = number;
		byte[] b = new byte[2];
		for (int i = 0; i < b.length; i++) {
			b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位
			temp = temp >> 8;// 向右移8位
		}
		return b;
	}

	/**
	 * 字节数组到short的转换.
	 */
	public static short byteToShort(byte[] b) {
		short s = 0;
		short s0 = (short) (b[0] & 0xff);// 最低位
		short s1 = (short) (b[1] & 0xff);
		s1 <<= 8;
		s = (short) (s0 | s1);
		return s;
	}

	/**
	 * int到字节数组的转换.
	 */
	public static byte[] intToByte(int number) {
		int temp = number;
		byte[] b = new byte[4];
		for (int i = 0; i < b.length; i++) {
			b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位
			temp = temp >> 8;// 向右移8位
		}
		return b;
	}

	/**
	 * 字节数组到int的转换.
	 */
	public static int byteToInt(byte[] b) {
		int s = 0;
		int s0 = b[0] & 0xff;// 最低位
		int s1 = b[1] & 0xff;
		int s2 = b[2] & 0xff;
		int s3 = b[3] & 0xff;
		s3 <<= 24;
		s2 <<= 16;
		s1 <<= 8;
		s = s0 | s1 | s2 | s3;
		return s;
	}

	/**
	 * long类型转成byte数组
	 */
	public static byte[] longToByte(long number) {
		long temp = number;
		byte[] b = new byte[8];
		for (int i = 0; i < b.length; i++) {
			b[i] = new Long(temp & 0xff).byteValue();// 将最低位保存在最低位 temp = temp
														// >> 8;// 向右移8位
		}
		return b;
	}

	/**
	 * 字节数组到long的转换.
	 */
	public static long byteToLong(byte[] b) {
		long s = 0;
		long s0 = b[0] & 0xff;// 最低位
		long s1 = b[1] & 0xff;
		long s2 = b[2] & 0xff;
		long s3 = b[3] & 0xff;
		long s4 = b[4] & 0xff;// 最低位
		long s5 = b[5] & 0xff;
		long s6 = b[6] & 0xff;
		long s7 = b[7] & 0xff;

		// s0不变
		s1 <<= 8;
		s2 <<= 16;
		s3 <<= 24;
		s4 <<= 8 * 4;
		s5 <<= 8 * 5;
		s6 <<= 8 * 6;
		s7 <<= 8 * 7;
		s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7;
		return s;
	}

	/**
	 * double到字节数组的转换.
	 */
	public static byte[] doubleToByte(double num) {
		byte[] b = new byte[8];
		long l = Double.doubleToLongBits(num);
		for (int i = 0; i < 8; i++) {
		    b[i] = new Long(l).byteValue();
		    l = l >> 8;
		}
		return b;
	}

	/**
	 * 字节数组到double的转换.
	 */
	public static double getDouble(byte[] b) {
	    long m;
	    m = b[0];
	    m &= 0xff;
	    m |= ((long) b[1] << 8);
	    m &= 0xffff;
	    m |= ((long) b[2] << 16);
	    m &= 0xffffff;
	    m |= ((long) b[3] << 24);
	    m &= 0xffffffffl;
	    m |= ((long) b[4] << 32);
	    m &= 0xffffffffffl;
	    m |= ((long) b[5] << 40);
	    m &= 0xffffffffffffl;
	    m |= ((long) b[6] << 48);
	    m &= 0xffffffffffffffl;
	    m |= ((long) b[7] << 56);
	    return Double.longBitsToDouble(m);
	}

	/**
	 * float到字节数组的转换.
	 */
	public static void floatToByte(float x) {
		//先用 Float.floatToIntBits(f)转换成int
	}

	/**
	 * 字节数组到float的转换.
	 */
	public static float getFloat(byte[] b) {
	    // 4 bytes
	    int accum = 0;
	    for ( int shiftBy = 0; shiftBy < 4; shiftBy++ ) {
	            accum |= (b[shiftBy] & 0xff) << shiftBy * 8;
	    }
	    return Float.intBitsToFloat(accum);
	}  

	 /**
	  * char到字节数组的转换.
	  */
	 public static byte[] charToByte(char c){
		byte[] b = new byte[2];
		b[0] = (byte) ((c & 0xFF00) >> 8);
		b[1] = (byte) (c & 0xFF);
		return b;
	 }

	 /**
	  * 字节数组到char的转换.
	  */
	 public static char byteToChar(byte[] b){
		char c = (char) (((b[0] & 0xFF) << 8) | (b[1] & 0xFF));
		return c;
	 }

	/**
	 * string到字节数组的转换.
	 */
	public static byte[] stringToByte(String str) throws UnsupportedEncodingException{
		return str.getBytes("GBK");
	}

	/**
	 * 字节数组到String的转换.
	 */
    public static String bytesToString(byte[] str) {
        String keyword = null;
        try {
            keyword = new String(str,"GBK");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return keyword;
    }

	/**
	 * object到字节数组的转换
	 */
	@Test
	public void testObject2ByteArray() throws IOException,
			ClassNotFoundException {
		// Object obj = "";
		Integer[] obj = { 1, 3, 4 };

		// // object to bytearray
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		ObjectOutputStream oo = new ObjectOutputStream(bo);
		oo.writeObject(obj);
		byte[] bytes = bo.toByteArray();
		bo.close();
		oo.close();
		System.out.println(Arrays.toString(bytes));

		Integer[] intArr = (Integer[]) testByteArray2Object(bytes);
		System.out.println(Arrays.asList(intArr));

		byte[] b2 = intToByte(123);
		System.out.println(Arrays.toString(b2));

		int a = byteToInt(b2);
		System.out.println(a);

	}

	/**
	 * 字节数组到object的转换.
	 */
	private Object testByteArray2Object(byte[] bytes) throws IOException,
			ClassNotFoundException {
		// byte[] bytes = null;
		Object obj;
		// bytearray to object
		ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
		ObjectInputStream oi = new ObjectInputStream(bi);
		obj = oi.readObject();
		bi.close();
		oi.close();
		System.out.println(obj);
		return obj;
	}

}
时间: 2024-10-30 12:54:03

byte[]与各种数据类型互相转换示例的相关文章

PHP中字符与字节的区别及字符串与字节转换示例_php实例

字符: 字符是可使用多种不同字符方案或代码页来表示的抽象实体.例如,Unicode UTF-16 编码将字符表示为 16 位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列.公共语言运行库使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)表示字符. php在UTF-8编码下,一个汉字占3个字符,gbk编码下只占2个字符. 字节(Byte): 字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位. 应用: 如果数据库中表为UTF8

从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值

最近在ASP.NET MVC中遇到一个问题,如题,在使用EF数据模型的时候,要去添加一条新的数据到Sqlserver数据库,在之前项目中并没有出现该异常,所以去扒了扒demo,发现有几个字段(数据库类型为datetime)savechange的时候默认绑定了datetime.now.问题就在这里,我的新项目并没有给定这几个字段的数据.下面总结下: 触发该错误的条件如下: SQL Server数据库版本中的字段类型为datetime2 数据库中,某个要进行Add或者Edit的字段的数据类型为dat

c#简繁转换示例

简繁转换|示例 首先 添加Microsoft.VisualBasic.dll引用 using Microsoft.VisualBasic; string gb2312 = "国营农场";string big5 = "";big5 = Strings.StrConv(gb2312, VbStrConv.TraditionalChinese, 0);Console.WriteLine(big5);

利用yahoo汇率接口实现实时汇率转换示例

 这篇文章主要介绍了利用yahoo汇率接口实现实时汇率转换示例,大家参考使用吧 代码如下:   代码如下: function getExchangeRate($from_Currency,$to_Currency) {         $amount = urlencode($amount);         $from_Currency = urlencode($from_Currency);         $to_Currency = urlencode($to_Currency);  

Java下枚举变量与其他数据类型的转换

Java下枚举变量与其他数据类型的转换 当使用enum定义一个枚举类型时,实际上所定义的类型自动继承了java.lang.Enum类.而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final的.可以直接通过枚举类型名直接使用它们,枚举类型名,可以转为一个数值,或作字符匹配的方法来识别类型,所以我们在写枚举类型的时候,可以简单理解为一个个的串. 如下: public enum emOrder {        orOne, orTwo, orClass   

对象-java初学者关于引用数据类型 强制转换的问题

问题描述 java初学者关于引用数据类型 强制转换的问题 class TestDemo7{ public static void main(String[] args) { Animal a=new Dog("旺财",2); System.out.println("名字:"+a.getName()); System.out.println("年龄:"+a.getAge()); a.eat(); Dog dog=(Dog) a;// 强转为Dog类

数据库-从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。

问题描述 从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值. 我的数据库中的time列类型是datetime类型的,但是出现这个问题是什么原因呢? 解决方案 varchar相当于字符串.那么你可以看下这个字符串的内容是什么,它是否是合法的日期 解决方案二: 你给这个字段赋值时,值是字符串类型,不符合datetime的转换规则,所以报错 解决方案三:

解决无法在unicode和非unicode字符串数据类型之间转换的方法详解

今天用excel导入数据又遇到了-- 错误 0xc02020f6:数据流任务:列"column"无法在 unicode和非unicode字符串数据类型之间转换. 原因:仔细看了一下,发现有些字段是varchar的,而excel中估计都是nvarchar类型. 方法: 1.修改表字段类型为nvarchar. 2.导入一个临时表,再insert*** into *** select ***. 3.直接通过应用程序读入记录集,然后再一条一条insert into --.

php之数据类型自动转换

原文:php之数据类型自动转换 1:概述 ---php是一种弱类型的语言,它可以根据运行环境的变化而自动进行数据类型的转换 1.1转换成布尔类型的原则 以下值都将转换成布尔类型中的false: A.布尔类型的false; B.空字符串'' C.正数0或浮点数0.0或字符串'0'(不包括字符串'0.0') D.没有成员的数组----array() E.null 除此之外其它值都转换成true. 1.2转换成数值型的原则 A.如果字符串为合法的数字字符串,同时不包含./e/E,而且没有超过整型的存数