牛骨文教育服务平台(让学习变的简单)
博文笔记

Android Int和byte数组,double和byte数组的相互转化

创建时间:2014-12-01 投稿人: 浏览次数:2749
/**
	 * 把int类型的数直接放到byte数组的某个位置
	 * 
	 * @param x
	 *            int类型的数
	 * @param bb
	 *            要放到哪个数组
	 * @param pos
	 *            数组的位置
	 */
	public static void int2Byte(int x, byte[] bb, int pos) {
		bb[pos] = (byte) (x >> 24);
		bb[pos + 1] = (byte) (x >> 16);
		bb[pos + 2] = (byte) (x >> 8);
		bb[pos + 3] = (byte) (x >> 0);
	}
	/**
	 * 把int转换成byte数组
	 * 
	 * @param 要转换的int值
	 * @return 返回的byte数组
	 */
	public static byte[] int2BytesArray(int n) {
		byte[] b = new byte[4];
		for (int i = 0; i < 4; i++) {
			b[i] = (byte) (n >> (24 - i * 8));
		}
		return b;
	}

/**
	 * 把byte数组转换成int类型
	 * 
	 * @param 源byte数组
	 * @return 返回的int值
	 */
	public static int byteArray2Int(byte[] b) {
		int a = (((int) b[0]) << 24) + (((int) b[1]) << 16) + (((int) b[2]) << 8) + b[3];
		if (a < 0) {
			a = a + 256;
		}
		return a;
	}

/**
	 * byte数组2个字节转换成int
	 * 
	 * @param b
	 *            byte数组
	 * @param p
	 *            从哪个位置开始的两个byte
	 * @return
	 */
	public static final int stou(byte[] b, int p) {
		return btou(b[p]) * 256 + btou(b[p + 1]);
	}
	/**
	 * 这个函数的意思是不是从byte数组的第p哥位置开始4个字节转换成int
	 * 
	 * @param b
	 *            源byte数组
	 * @param p
	 *            数组的第几个位置开始
	 * @return 返回的int值
	 */
	public static final int itou(byte[] b, int p) {
		return ((btou(b[p]) * 256 + btou(b[p + 1])) * 256 + btou(b[p + 2])) * 256 + btou(b[p + 3]);
	}

	/**
	 * 防止byte的值超过127,超过了都会变成负数
	 * 
	 * @param b
	 * @return
	 */
	public static final int btou(byte b) {
		if (b >= 0)
			return (b + 0);
		else
			return (256 + b);
	}

附:double和byte数组的相互转化

	/**
	 * byte数组转double
	 * 
	 * @param Array
	 * @param Pos
	 * @return
	 */
	public static double byteArrayToDouble(byte[] Array, int Pos) {
		long accum = 0;
		accum = Array[Pos + 0] & 0xFF;
		accum |= (long) (Array[Pos + 1] & 0xFF) << 8;
		accum |= (long) (Array[Pos + 2] & 0xFF) << 16;
		accum |= (long) (Array[Pos + 3] & 0xFF) << 24;
		accum |= (long) (Array[Pos + 4] & 0xFF) << 32;
		accum |= (long) (Array[Pos + 5] & 0xFF) << 40;
		accum |= (long) (Array[Pos + 6] & 0xFF) << 48;
		accum |= (long) (Array[Pos + 7] & 0xFF) << 56;
		return Double.longBitsToDouble(accum);
	}

	/**
	 * double 转byte数组
	 * 
	 * @param Value
	 * @return
	 */
	public static byte[] doubleToByteArray(double Value) {
		long accum = Double.doubleToRawLongBits(Value);
		byte[] byteRet = new byte[8];
		byteRet[0] = (byte) (accum & 0xFF);
		byteRet[1] = (byte) ((accum >> 8) & 0xFF);
		byteRet[2] = (byte) ((accum >> 16) & 0xFF);
		byteRet[3] = (byte) ((accum >> 24) & 0xFF);
		byteRet[4] = (byte) ((accum >> 32) & 0xFF);
		byteRet[5] = (byte) ((accum >> 40) & 0xFF);
		byteRet[6] = (byte) ((accum >> 48) & 0xFF);
		byteRet[7] = (byte) ((accum >> 56) & 0xFF);
		return byteRet;
	}



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。