`
JavaCrazyer
  • 浏览: 3008738 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

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;
	}

}

 

分享到:
评论

相关推荐

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

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

    C#byte数组结构体互相转换示例.zip

    总结起来,这个"C#byte数组结构体互相转换示例"提供了C#中结构体与字节数组之间转换的实用方法,解决了开发过程中常见的序列化和反序列化需求,提高了代码效率。开发者可以根据自己的项目需求,直接引用或借鉴这些...

    Java 基础 byte[]与各种数据类型互相转换的简单示例

    本示例主要关注的是`byte[]`类型与其他基本数据类型(如`long`、`int`、`double`、`float`、`short`、`char`以及`String`)之间的转换。以下是对这些转换方法的详细解释: 1. **`short`到`byte[]`转换**: - `...

    Android byte[] 和 String互相转换

    综上所述,理解和熟练掌握`byte[]`与`String`之间的转换,是Android开发中的一项基础技能,能帮助开发者处理各种数据交换和存储问题。在实际应用中,根据具体需求选择合适的转换方法和字符编码,是确保数据正确性和...

    delphi中String,PChar,PByte,Array of Char,Array of Byte 互相转换

    ### Delphi中String,PChar,PByte,Array of Char,Array of Byte 互相转换 在Delphi编程语言中,字符串和其他与字符相关的数据类型之间的转换是常见的需求。本篇文章将详细介绍如何在这些数据类型之间进行转换,...

    delphi-string互相转化为byte数组

    在Delphi编程环境中,字符串(String)与字节数组(Byte Array)之间的转换是常见的操作,尤其是在处理二进制数据、网络通信或者文件读写时。本文将深入探讨如何在Delphi中实现这两种类型的数据互换。 1. **字符串...

    Java实现图片与二进制的互相转换

    Java实现图片与二进制的互相转换是Java编程中的一项基本操作,它将图片转换为二进制数据,然后再将二进制数据转换回图片。这种操作在多种应用场景中都有其重要价值,例如在网络上传输图片、图片存储、图片处理等领域...

    28.java基本类型封装.docx

    在Java 5引入了自动装箱和拆箱机制,这使得开发者可以直接将基本数据类型与对应的包装类型互相转换,而无需显式地使用构造函数或转换方法。 - **自动装箱**:将基本数据类型自动转换为其对应的包装类型。例如,`int...

    C#浮点数和16进制字节数互相转换

    在C#编程语言中,处理浮点数与16进制表示之间转换是常见的任务,尤其是在数据存储、网络传输或二进制解析等场景。本文将深入探讨如何使用C#来实现单精度浮点数(Single)与16进制字符串的相互转换。 首先,我们需要...

    Java byte数组操纵方式代码实例解析

    - 图片与byte数组的互相转换,通常涉及图像编码和解码过程。 - 字节数组与整型(int)、长整型(long)、短整型(short)和字节类型(byte)之间的转换,需要根据字节顺序和位运算进行操作。 - 字符串与字节数组的...

    Java极品学习资料

    **基本数据类型强制转换** - 强制类型转换用于将一个类型转换为另一个类型。 - 示例代码说明不同类型间的转换规则及注意事项。 **创建对象时的内存问题** - 对象创建时,会在堆内存中分配空间。 - 示例代码说明创建...

    C#编程实现对象与JSON串互相转换实例分析

    在C#编程中,将对象转换为JSON字符串和将JSON字符串还原为对象是常见的操作,尤其是在数据交换和存储时。本文将深入探讨如何在.NET 2.0和.NET 3.5环境中实现这一功能。 首先,对于.NET 2.0环境,由于.NET Framework...

    java数据结构算法

    - 抽象数据类型(ADT)是对数据类型的一种抽象描述。 - ADT定义了一组值以及在这些值上的操作集合。 - **2.1.3 小结** - 数据结构是算法设计的基础。 **2.2 算法及性能分析** - **2.2.1 算法** - 算法是一组...

    《Java核心技术卷1》 学习笔记.doc

    - 不可与整数互相转换 - **字符串**: `String` - 不可变性: 字符串一旦创建,其内容不可更改。 - 字符串比较: 使用`equals()`方法而不是`==`操作符。 **3.5 常量** - `const`是保留关键字但未被使用,使用`final...

    汉字跟Unicode 互相 转化 C# 代码

    总之,在C#中处理汉字与Unicode的转换,主要是通过`char`类型、`int`类型以及`System.Text.Encoding`类来实现。理解这些基础概念和方法,可以帮助我们更好地处理涉及字符编码的问题,无论是读取文件还是进行数据传输...

    2021-2022计算机二级等级考试试题及答案No.17154.docx

    - **应用示例**: 不同类型的计算机可以通过 TCP/IP 协议互相发送电子邮件、访问网站等。 ### 10. Access 数据库中的表 - **知识点**: 在 Access 数据库中,数据主要保存在“表”对象中。 - **应用示例**: 创建表并...

    Oracle 字符集的查看和修改

    - 修改数据库字符集是一个复杂的过程,需要先备份数据库,并且确保所有依赖的数据类型都兼容新字符集。 - 使用`ALTER DATABASE CHARACTERSET`命令进行修改,但不是所有的字符集都可以互相转换。 - 示例: ```sql...

    C#资料,本人学习整理过

    - **公共类型系统 (CTS)**:定义了.NET Framework 支持的所有语言间的兼容数据类型和功能。 - **类库集(FCL)**:提供了一系列预编译好的类和接口,涵盖了广泛的领域,如数据库访问、网络通信、图形用户界面等。 ...

    C 语言最重要的知识点复习资料

    - 字符型与整型可以互相转换,例如`char a = 65;`,然后通过`printf("%c", a);`输出对应的字符(此处输出为`A`)。 以上是对计算机二级C语言考试中的一些重要知识点的总结,掌握这些内容对于通过考试非常关键。...

Global site tag (gtag.js) - Google Analytics