热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javadouble转byte数组_Java基本类型与byte数组的转换

Java基本类型与byte数组之间相互转换:packagecn.teaey.utils;importjava.nio.charset.Charset;publiccl

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 &#61; 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 &#61; 122;

int i &#61; 122;

long l &#61; 1222222;

char c &#61; &#39;a&#39;;

float f &#61; 122.22f;

double d &#61; 122.22;

String string &#61; "我是好孩子";

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的基本类型存储长度都是固定的&#xff0c;不因机器的不同而不同&#xff0c;因此使java拥有了良好的移植性。

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

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

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC



推荐阅读
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
author-avatar
逍遥子2502897751
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有