package com.yqw.java.util;

/**
 * 数字转换工具
 */
public class MathUtils {

    /**
     * short转byte
     */
    public static byte[] toBytes(short s)
    {
        return new byte[] { (byte)(s & 0x00FF), (byte)((s & 0xFF00) >> 8) };
    }

    /**
     * unsigned short转byte
     */
    public static byte[] unsignedShortToBytes(int s)
    {
        return new byte[] { (byte)(s & 0x000000FF),
                           (byte)((s & 0x0000FF00) >> 8) };
    }

    /**
     * int转byte
     */
    public static byte[] toBytes(int s)
    {
        return new byte[] { (byte) (s & 0x000000FF),
                            (byte)((s & 0x0000FF00) >> 8),
                            (byte)((s & 0x00FF0000) >> 16),
                            (byte)((s & 0xFF000000) >> 24) };
    }

    /**
     * byte转int
     */
    public static  int toInt(byte[] b)
    {
        return b[0] & 0xff  | (b[1] & 0xff) << 8| (b[2] & 0xff) << 16
                | (b[3] & 0xff<< 24);
    }
    
    /**
     * byte转long
     */
    public static  long toUnsignedInt(byte[] b)
    {
        return  b[0]& 0xff  | (b[1] & 0xff) << 8| (b[2] & 0xff) << 16
        | (b[3] << 24);
    }

    /**
     * byte转short
     */
    public static  short toShort(byte[] b)
    {
//        return (short) (b[0] << 24 | (b[1] & 0xff) << 16) ;
        return (short) (((b[1] << 8) | b[0] & 0xff));
    }
    
    /**
     * byte转unsigned short
     */
    public static  int toUnsignedShort(byte[] b)
    {
        return (b[0] << 24 | (b[1] & 0xff) << 16) ;
    }
    
    /**
     * Assume the long is used as unsigned int
     * @param s
     * @return
     */
    public static byte[] unsignedIntToBytes(long s)
    {
        return new byte[] { (byte) (s & 0x00000000000000FF),
                            (byte)((s & 0x000000000000FF00) >> 8),
                            (byte)((s & 0x0000000000FF0000) >> 16),
                            (byte)((s & 0x00000000FF000000) >> 24) };             
    }
    
    
    /**
     * float转换byte
     *
     * @param x
     * @param index
     */
    public static byte[] putFloat(float x) {
        byte[] b = new byte[4];
        int l = Float.floatToIntBits(x);
        for (int i = 0; i < 4; i++) {
            b[i] = new Integer(l).byteValue();
            l = l >> 8;
        }
        return b;
    }

    /**
     * 通过byte数组取得float
     *
     * @param b
     * @return
     */
    public static float getFloat(byte[] b) {
        int 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);
        return Float.intBitsToFloat(l);
    }

}

MathUtils的更多相关文章

  1. 科学计算法帮助类MathUtils

    import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; /** * 科学计算 ...

  2. MathUtils BigDecimal 数字工具类

    package com.hxqc.basic.dependency.util; import org.apache.commons.lang.StringUtils; import java.math ...

  3. Blender 脚本之 Operator 初探

    addon(插件)用来扩展 Blender 的功能,跟其他软件里的 plugin(插件)一样,去掉不会影响软件的运行.插件可以加到 Blender 的用户偏好设置目录里,或者就在你所编辑的.blend ...

  4. 你应该知道的那些Android小经验

    原文出处:http://jayfeng.com/ 做Android久了,就会踩很多坑,被坑的多了就有经验了,闲暇之余整理了部分,现挑选一些重要或者偏门的“小”经验做个记录. 查看SQLite日志 ad ...

  5. android opengl

    引用:http://weimingtom.iteye.com/blog/1616972 二维坐标系变换为原点在左上角(测试用) * GLES * JOGL * LWJGL * libgdx(使用g2d ...

  6. (Python)导出指定文件夹中as文件的完全限定类名

    AS3程序在编译的过程中,有一个特点是这样的,不管是项目中的类,还是标准库或者第三方库的类,编译的时候只会把用到的那些类文件编译进去,也就是说,某一些类,只要没有被主程序引用到,那这个文件是不会被编译 ...

  7. 算法(二)之遗传算法(SGA)

    算法(二)之遗传算法(SGA) 遗传算法(Genetic Algorithm)又叫基因进化算法或进化算法,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,属于启发式搜索算法一种. 下面通过下 ...

  8. Guava 12-数学运算

    范例 int logFloor = LongMath.log2(n, FLOOR); int mustNotOverflow = IntMath.checkedMultiply(x, y); long ...

  9. Scut游戏服务器免费开源框架--快速开发(2)

    Scut快速开发(2) Python脚本开发 1   开发环境 Scut Lib版本:5.2.3.2 需要安装的软件 a)        IIS和消息队列(MSMQ) 进入控制面板,程序和功能 b)  ...

随机推荐

  1. 部署spring Boot项目到tomcat

    导火线 : 遇到两次本地可以跑通,部署到服务器tomcat就出问题的情况了,为了不忘记,记录在此吧 第一次部署到服务器上是静态资源访问不了,花了一些时间,是因为application.yml中的 mv ...

  2. [PHP] PHP源码常用代码中的宏定义

    PHP源码常用代码宏定义:#define 宏名 字符串#表示这是一条预处理命令,所有的预处理命令都以#开头.define是预处理命令.宏名是标识符的一种,命名规则和标识符相同.字符串可以是常数.表达式 ...

  3. 企业信息化快速开发平台--JeeSite

    JeeSite是在Spring Framework基础上搭建的一个Java基础开发平台,以Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Eh ...

  4. UVA 10382 - Watering Grass【贪心+区间覆盖问题+高精度】

    UVa 10382 - Watering Grass n sprinklers are installed in a horizontal strip of grass l meters long a ...

  5. Codeforces Round #345(Div. 2)-651A.水题 651B.。。。 651C.去重操作 真是让人头大

    A. Joysticks time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  6. c++(爬楼梯)

    前两天上网的时候看到一个特别有意思的题目,在这里和朋友们分享一下: 有一个人准备开始爬楼梯,假设楼梯有n个,这个人只允许一次爬一个楼梯或者一次爬两个楼梯,请问有多少种爬法? 在揭晓答案之前,朋友们可以 ...

  7. Genymotion的安装与使用(附百度云盘下载地址,全套都有,无需注册Genymotion即可使用)

    http://blog.csdn.net/scythe666/article/details/70216144 附百度云盘下载地址 :http://pan.baidu.com/s/1jHPG7h8 1 ...

  8. 关于Set对象(ES6)

    今天初次接触ES6,发现确实挺神奇的,许多用以前方法去实现需要一大串代码的,用ES6竟然几句就搞定了. 这里我要说的是Set对象.Set对象是ES6中新增的类型,可以自动排除重复项,生成Set对象后, ...

  9. Javascript Array 非常用方法解析

    在ECMAScript5的Array中已经有了Array.prototype.forEach,Array.prototype.filter,Array.prototype.map等方法 1. map ...

  10. kafka和strom集群的环境安装

    前言 storm和kafka集群安装是没有必然联系的,我将这两个写在一起,是因为他们都是由zookeeper进行管理的,也都依赖于JDK的环境,为了不重复再写一遍配置,所以我将这两个写在一起.若只需一 ...