java short to byte_java笔记 Java中byte数组与int,long,short,char间的转换

package com.util;

public class ByteUtil {

/**

* 转换short为byte

*

* @param b

* @param s

* 需要转换的short

* @param index

*/

public static void putShort(byte b[], short s, int index) {

b[index + 1] = (byte) (s >> 8);

b[index + 0] = (byte) (s >> 0);

}

/**

* 通过byte数组取到short

*

* @param b

* @param index

* 第几位开始取

* @return

*/

public static short getShort(byte[] b, int index) {

return (short) (((b[index + 1] << 8) | b[index + 0] & 0xff));

}

/**

* 转换int为byte数组

*

* @param bb

* @param x

* @param index

*/

public static void putInt(byte[] bb, int x, int index) {

bb[index + 3] = (byte) (x >> 24);

bb[index + 2] = (byte) (x >> 16);

bb[index + 1] = (byte) (x >> 8);

bb[index + 0] = (byte) (x >> 0);

}

/**

* 通过byte数组取到int

*

* @param bb

* @param index

* 第几位开始

* @return

*/

public static int getInt(byte[] bb, int index) {

return (int) ((((bb[index + 3] & 0xff) << 24)

| ((bb[index + 2] & 0xff) << 16)

| ((bb[index + 1] & 0xff) << 8) | ((bb[index + 0] & 0xff) << 0)));

}

/**

* 转换long型为byte数组

*

* @param bb

* @param x

* @param index

*/

public static void putLong(byte[] bb, long x, int index) {

bb[index + 7] = (byte) (x >> 56);

bb[index + 6] = (byte) (x >> 48);

bb[index + 5] = (byte) (x >> 40);

bb[index + 4] = (byte) (x >> 32);

bb[index + 3] = (byte) (x >> 24);

bb[index + 2] = (byte) (x >> 16);

bb[index + 1] = (byte) (x >> 8);

bb[index + 0] = (byte) (x >> 0);

}

/**

* 通过byte数组取到long

*

* @param bb

* @param index

* @return

*/

public static long getLong(byte[] bb, int index) {

return ((((long) bb[index + 7] & 0xff) << 56)

| (((long) bb[index + 6] & 0xff) << 48)

| (((long) bb[index + 5] & 0xff) << 40)

| (((long) bb[index + 4] & 0xff) << 32)

| (((long) bb[index + 3] & 0xff) << 24)

| (((long) bb[index + 2] & 0xff) << 16)

| (((long) bb[index + 1] & 0xff) << 8) | (((long) bb[index + 0] & 0xff) << 0));

}

/**

* 字符到字节转换

*

* @param ch

* @return

*/

public static void putChar(byte[] bb, char ch, int index) {

int temp = (int) ch;

// byte[] b = new byte[2];

for (int i = 0; i < 2; i ++ ) {

bb[index + i] = new Integer(temp & 0xff).byteValue(); // 将最高位保存在最低位

temp = temp >> 8; // 向右移8位

}

}

/**

* 字节到字符转换

*

* @param b

* @return

*/

public static char getChar(byte[] b, int index) {

int s = 0;

if (b[index + 1] > 0)

s += b[index + 1];

else

s += 256 + b[index + 0];

s *= 256;

if (b[index + 0] > 0)

s += b[index + 1];

else

s += 256 + b[index + 0];

char ch = (char) s;

return ch;

}

/**

* float转换byte

*

* @param bb

* @param x

* @param index

*/

public static void putFloat(byte[] bb, float x, int index) {

// byte[] b = new byte[4];

int l = Float.floatToIntBits(x);

for (int i = 0; i < 4; i++) {

bb[index + i] = new Integer(l).byteValue();

l = l >> 8;

}

}

/**

* 通过byte数组取得float

*

* @param bb

* @param index

* @return

*/

public static float getFloat(byte[] b, int index) {

int l;

l = b[index + 0];

l &= 0xff;

l |= ((long) b[index + 1] << 8);

l &= 0xffff;

l |= ((long) b[index + 2] << 16);

l &= 0xffffff;

l |= ((long) b[index + 3] << 24);

return Float.intBitsToFloat(l);

}

/**

* double转换byte

*

* @param bb

* @param x

* @param index

*/

public static void putDouble(byte[] bb, double x, int index) {

// byte[] b = new byte[8];

long l = Double.doubleToLongBits(x);

for (int i = 0; i < 4; i++) {

bb[index + i] = new Long(l).byteValue();

l = l >> 8;

}

}

/**

* 通过byte数组取得float

*

* @param bb

* @param index

* @return

*/

public static double getDouble(byte[] b, int index) {

long l;

l = b[0];

l &= 0xff;

l |= ((long) b[1] << 8);

l &= 0xffff;

l |= ((long) b[2] << 16);

l &= 0xffffff;

l |= ((long) b[3] << 24);

l &= 0xffffffffl;

l |= ((long) b[4] << 32);

l &= 0xffffffffffl;

l |= ((long) b[5] << 40);

l &= 0xffffffffffffl;

l |= ((long) b[6] << 48);

l &= 0xffffffffffffffl;

l |= ((long) b[7] << 56);

return Double.longBitsToDouble(l);

}

}

public class DataTypeChangeHelper {

/**

* 将一个单字节的byte转换成32位的int

*

* @param b

* byte

* @return convert result

*/

public static int unsignedByteToInt(byte b) {

return (int) b & 0xFF;

}

/**

* 将一个单字节的Byte转换成十六进制的数

*

* @param b

* byte

* @return convert result

*/

public static String byteToHex(byte b) {

int i = b & 0xFF;

return Integer.toHexString(i);

}

/**

* 将一个4byte的数组转换成32位的int

*

* @param buf

* bytes buffer

* @param byte[]中开始转换的位置

* @return convert result

*/

public static long unsigned4BytesToInt(byte[] buf, int pos) {

int firstByte = 0;

int secondByte = 0;

int thirdByte = 0;

int fourthByte = 0;

int index = pos;

firstByte = (0x000000FF & ((int) buf[index]));

secondByte = (0x000000FF & ((int) buf[index + 1]));

thirdByte = (0x000000FF & ((int) buf[index + 2]));

fourthByte = (0x000000FF & ((int) buf[index + 3]));

index = index + 4;

return ((long) (firstByte << 24 | secondByte << 16 | thirdByte << 8 | fourthByte)) & 0xFFFFFFFFL;

}

/**

* 将16位的short转换成byte数组

*

* @param s

* short

* @return byte[] 长度为2

* */

public static byte[] shortToByteArray(short s) {

byte[] targets = new byte[2];

for (int i = 0; i < 2; i++) {

int offset = (targets.length - 1 - i) * 8;

targets[i] = (byte) ((s >>> offset) & 0xff);

}

return targets;

}

/**

* 将32位整数转换成长度为4的byte数组

*

* @param s

* int

* @return byte[]

* */

public static byte[] intToByteArray(int s) {

byte[] targets = new byte[2];

for (int i = 0; i < 4; i++) {

int offset = (targets.length - 1 - i) * 8;

targets[i] = (byte) ((s >>> offset) & 0xff);

}

return targets;

}

/**

* long to byte[]

*

* @param s

* long

* @return byte[]

* */

public static byte[] longToByteArray(long s) {

byte[] targets = new byte[2];

for (int i = 0; i < 8; i++) {

int offset = (targets.length - 1 - i) * 8;

targets[i] = (byte) ((s >>> offset) & 0xff);

}

return targets;

}

/**32位int转byte[]*/

public static byte[] int2byte(int res) {

byte[] targets = new byte[4];

targets[0] = (byte) (res & 0xff);// 最低位

targets[1] = (byte) ((res >> 8) & 0xff);// 次低位

targets[2] = (byte) ((res >> 16) & 0xff);// 次高位

targets[3] = (byte) (res >>> 24);// 最高位,无符号右移。

return targets;

}

/**

* 将长度为2的byte数组转换为16位int

*

* @param res

* byte[]

* @return int

* */

public static int byte2int(byte[] res) {

// res = InversionByte(res);

// 一个byte数据左移24位变成0x??000000,再右移8位变成0x00??0000

int targets = (res[0] & 0xff) | ((res[1] << 8) & 0xff00); // | 表示安位或

return targets;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值