Java基本类型与byte数组之间相互转换:

package cn.teaey.utils;

import java.nio.charset.Charset;

public class ByteUtil

{

public static byte[] getBytes(short data)

{

byte[] bytes = new byte[2];

bytes[0] = (byte) (data & 0xff);

bytes1 = (byte) ((data & 0xff00) >> 8);

return bytes;

}

public static byte[] getBytes(char data)

{

byte[] bytes = new byte[2];

bytes[0] = (byte) (data);

bytes[1] = (byte) (data >> 8);

return bytes;

}

public static byte[] getBytes(int data)

{

byte[] bytes = new byte[4];

bytes[0] = (byte) (data & 0xff);

bytes[1] = (byte) ((data & 0xff00) >> 8);

bytes[2] = (byte) ((data & 0xff0000) >> 16);

bytes[3] = (byte) ((data & 0xff000000) >> 24);

return bytes;

}

public static byte[] getBytes(long data)

{

byte[] bytes = new byte[8];

bytes[0] = (byte) (data & 0xff);

bytes[1] = (byte) ((data >> 8) & 0xff);

bytes[2] = (byte) ((data >> 16) & 0xff);

bytes[3] = (byte) ((data >> 24) & 0xff);

bytes[4] = (byte) ((data >> 32) & 0xff);

bytes[5] = (byte) ((data >> 40) & 0xff);

bytes[6] = (byte) ((data >> 48) & 0xff);

bytes[7] = (byte) ((data >> 56) & 0xff);

return bytes;

}

public static byte[] getBytes(float data)

{

int intBits = Float.floatToIntBits(data);

return getBytes(intBits);

}

public static byte[] getBytes(double data)

{

long intBits = Double.doubleToLongBits(data);

return getBytes(intBits);

}

public static byte[] getBytes(String data, String charsetName)

{

Charset charset = Charset.forName(charsetName);

return data.getBytes(charset);

}

public static byte[] getBytes(String data)

{

return getBytes(data, "GBK");

}

public static short getShort(byte[] bytes)

{

return (short) ((0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)));

}

public static char getChar(byte[] bytes)

{

return (char) ((0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)));

}

public static int getInt(byte[] bytes)

{

return (0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)) | (0xff0000 & (bytes[2] << 16)) | (0xff000000 & (bytes[3] << 24));

}

public static long getLong(byte[] bytes)

{

return(0xffL & (long)bytes[0]) | (0xff00L & ((long)bytes[1] << 8)) | (0xff0000L & ((long)bytes[2] << 16)) | (0xff000000L & ((long)bytes[3] << 24))

| (0xff00000000L & ((long)bytes[4] << 32)) | (0xff0000000000L & ((long)bytes[5] << 40)) | (0xff000000000000L & ((long)bytes[6] << 48)) | (0xff00000000000000L & ((long)bytes[7] << 56));

}

public static float getFloat(byte[] bytes)

{

return Float.intBitsToFloat(getInt(bytes));

}

public static double getDouble(byte[] bytes)

{

long l = getLong(bytes);

System.out.println(l);

return Double.longBitsToDouble(l);

}

public static String getString(byte[] bytes, String charsetName)

{

return new String(bytes, Charset.forName(charsetName));

}

public static String getString(byte[] bytes)

{

return getString(bytes, "GBK");

}

public static void main(String[] args)

{

short s = 122;

int i = 122;

long l = 1222222;

char c = 'a';

float f = 122.22f;

double d = 122.22;

String string = "我是好孩子";

System.out.println(s);

System.out.println(i);

System.out.println(l);

System.out.println(c);

System.out.println(f);

System.out.println(d);

System.out.println(string);

System.out.println("**************");

System.out.println(getShort(getBytes(s)));

System.out.println(getInt(getBytes(i)));

System.out.println(getLong(getBytes(l)));

System.out.println(getChar(getBytes(c)));

System.out.println(getFloat(getBytes(f)));

System.out.println(getDouble(getBytes(d)));

System.out.println(getString(getBytes(string)));

}

}

java的基本类型存储长度都是固定的,不因机器的不同而不同,因此使java拥有了良好的移植性。

最近在做项目时,需要在一个变量里存放16位长的二进制数字,查看上表可知short类型正好符合需要。

但是因为java中的数字类型都是有符号的,因此short类型的第一位被用于表示符号,实际存储长度只有15位,

即-7FFF-+7FFF。那如果要存放+7FFF-+FFFF的数字该怎么办呢?只有采取变通的办法,采用变换算法。我们可以利用-7FFF--0001来存放大于7FFF的数字。转换公式为-(FFFF-X)-1。由于有了符号,所以+0000和-0000是相等的,所以比无符号数少了1个数字,所以要在公式里减1,由于这个问题,用这个方法我们就不能存放+8000了。

用这个方法可以基本满足我们的需要,如有特殊需要,如要存储+8000,那只有采取别的办法了。

java double 转 byte数组_Java基本类型与byte数组的转换相关推荐

  1. java int byte数组_Java 中int与byte数组转换详解

    1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...

  2. java new数组_Java如何使用new创建数组

    java语言使用new操作符来创建数组,语法如下: arrayRefVar = new dataType[arraySize]; 上面的语法语句做了两件事: 一.使用dataType[arraySiz ...

  3. java不等长二维数组_Java中关于二维数组的理解与使用

    今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...

  4. java 申请不定长度数组_java中申请不定长度数组ArrayList的方法

    如下所示: import java.util.ArrayList; //java中申请不定长度数组 public class Test01 { public static void main(Stri ...

  5. java面向对象数组_Java面向对象的构造器与数组对象

    Java开发离不开面相对象,那么面向对象如何来的?什么又是数组对象?今天小编就来与大家共同学习一下Java的面向对象的构造器与数组对象. 构造器:用于创建对象时执行初始化.当创建一个对象时eg:new ...

  6. java char 动态数组_Java程序来填充char数组中的元素

    可以使用java.util.Arrays.fill()方法将元素填充到char数组中.此方法将所需的char值分配给Java中的char数组.所需的两个参数是数组名称和要存储在数组元素中的值. 演示此 ...

  7. JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  8. java包装类有几种_Java包装类型有几种

    Java包装类型有8种,分别是:1.Byte:2.Integer:3.Short:4.Long:5.Float:6.Double:7.Boolean:8.Character. [相关学习推荐:java ...

  9. java 枚举使用简书_java枚举类型使用和详解

    1.定义 An enum type is a special data type that enables for a variable to be a set of predefined const ...

最新文章

  1. Ubuntu 调试的时候,不能查看变量值
  2. 手机开启apache_微信否认“年终奖人均280万”;MySQL 8.0.14 稳定版发布;支付宝集五福昨开启,一天29万人集齐......
  3. C#中timer类的用法
  4. 思维题 UVA 10881 Piotr's Ants
  5. 处理本地能登陆mysql但navicat连接不上的问题
  6. ai中导入sketch_在Sketch中营造深度感
  7. 物联网中常见的传感器类型
  8. 对未标记为可安全执行的脚本_三、??XSS跨站脚本攻击
  9. 功成身退:AMD Mantle不再优化了
  10. ORA-01403: no data found
  11. 机器人对话常用语模板_小a电话机器人免费咨询
  12. vsm什么意思_价值流程图VSM浅析
  13. vue中使用ue编辑器的一些简易说明
  14. 节后上班 北京车辆尾号限行2日轮换
  15. 你了解资金盘吗?那孪生兄弟产品盘你知道吗?
  16. 千亿雅虎确认48亿贱卖,其实这些巨头比它更惨
  17. 左方之地 - 结论 - 组合计数
  18. 融云通讯服务器,发送图片到自己的服务器
  19. Jmeter接口测试参数化详解
  20. Github每日精选(第77期):Go (Golang) 编写的 HTTP Web 框架gin

热门文章

  1. 深度神经网络的训练过程,深度神经网络训练
  2. 这时候买阿里,买的是估值潜力
  3. 2010年圣诞节祝福短信大全
  4. excel报表技巧:几个关于汇报演示方面的小功能
  5. 摩托车爱好者头盔的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  6. 使用ntfs-3g挂载NTFS格式的移动硬盘
  7. 年薪都是二十多万,选华为还是选特斯拉
  8. 物流系统管理课程(二十)
  9. 转:国内从事CV相关的企业
  10. 5G基站 — CU和DU分离