Java和C/C++交互的字节工具类

原创 2013年12月05日 11:28:38
 package cn.com.insigma.utils;

import java.util.Calendar;
import java.util.Date;

/**
 * 字节工具类
 * @author jingxuan
 */
public class ByteUtils {
/**
* int convert byte[]
* @param n
* @return
*/
public static byte[] int2Bytes(int n) {
byte[] b = new byte[4];
b[3] = (byte) (n & 0xff);
b[2] = (byte) (n >> 8 & 0xff);
b[1] = (byte) (n >> 16 & 0xff);
b[0] = (byte) (n >> 24 & 0xff);
return b; 
}

/**
* byte[] convert int
* @param b
* @return
*/
public static int bytes2Int(byte b[]) {
return b[3] & 0xff | (b[2] & 0xff) << 8 | (b[1] & 0xff) << 16
| (b[0] & 0xff) << 24;
}

/**
* float to byte[]
* @param f
* @return
*/
public static byte[] float2Bytes(float f) {

int fbit = Float.floatToIntBits(f);
byte[] b = new byte[4];
for (int i = 0; i < 4; i++) {
b[i] = (byte) (fbit >> (24 - i * 8));
}

int len = b.length;
byte[] dest = new byte[len];
System.arraycopy(b, 0, dest, 0, len);

byte temp;
for (int i = 0; i < len / 2; ++i) {
temp = dest[i];
dest[i] = dest[len - i - 1];
dest[len - i - 1] = temp;
}

return dest;

}

// 时1字节,分1字节,秒1字节,年2字节,月1字节,日1字节, 预留1字节
/**
* 日期转成8字节byte[]
* @param date
* @return
*/
public static byte[] date2Bytes(Date date) {
byte[] b = new byte[8];
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);

// 按时、分、秒、年、月、日顺序
b[0] = int2OneByte(hour); // 1字节
b[1] = int2OneByte(minute);// 1字节
b[2] = int2OneByte(second);// 1字节
System.arraycopy(int2TwoBytes(year), 0, b, 3, 2);// 年,2字节
b[5] = int2OneByte(month+1);// 1字节
b[6] = int2OneByte(day);// 1字节
//b[7] 保留一字节
return b;
}
public static long bytes2Long(byte[] b)  { 
       long iOutcome = 0; 
       byte bLoop; 
       for (int i = 0; i <b.length; i++)  { 
           bLoop = b[i];
           iOutcome += ((long)(bLoop & 0x000000ff)) << (8 * i); 
       } 
       return iOutcome; 
   }
 
public static byte[] longtoBytes(long l){
byte[] byteArray = new byte[8];
        for (int i=0; i<8; i++){
            byteArray[i] = new Long(l & 0xFF).byteValue();
            l >>= 8;
        }    
        return byteArray;
    }

/**
* int convert 1 byte
* @param num
* @return
*/
public static byte int2OneByte(int num) {
return (byte) (num & 0xff);
}

/**
* int convert byte[](length = 2)
* @param num
* @return
*/
public static byte[] int2TwoBytes(int num) {
byte[] b = new byte[2];
b[1] = (byte) (num & 0xff);
b[0] = (byte) (num >> 8 & 0xff);
return b;
}
/**
* short convert byte[]
* @param b
* @return
*/
public static short bytes2Short(byte[] b){
return (short)(b[1] & 0xff | (b[0] & 0xff) << 8);
}
}

最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具

前言:用于处理Java基本数据的转换及进制转换操作工具 一、实现功能 1、int与byte互转 2、int与byte[]互转 3、short与byte互转 4、short与byte[]互转 5、16位...
  • eguid_1
  • eguid_1
  • 2017年05月12日 16:25
  • 1112

C++ 工具类 [StrUtil] 和 工具方法

#pragma once #ifndef STRUTIL_H #define STRUTIL_H #include #include #include #include using na...
  • haifengzhilian
  • haifengzhilian
  • 2015年12月31日 09:24
  • 1845

工作中重新封装编写的一系列工具函数(c/c++)

// //  JGUtil.cpp // #include "JGUtil.h" #include "cocos2d.h" #include "u...
  • zhangyulin54321
  • zhangyulin54321
  • 2016年05月26日 16:36
  • 889

Intellij idea快速查看Java类字节码

原文地址,点击打开链接 最近在研究JVM类加载、JVM字节码相关的东西,需要经常查看字节码。之前都是用一些外部工具例如bytecoder、JD或者直接cmd使用javap的方式查看字...
  • qq_24489717
  • qq_24489717
  • 2016年12月23日 11:41
  • 5435

分享一个MD5加密java工具类

一直都有分享这个工具类的想法,只是碍于没有时间整理,所以一直没有把代码贴出来。 这是一个个人认为非常好用的使用MD5+salt加密的工具类,一部分代码由网上搜索而得,一部分自己修改添...
  • shanzhizi
  • shanzhizi
  • 2013年08月14日 22:22
  • 1838

java读取文件读取工具类-将文件到byte数组的几种方式

package zmx.util; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; impor...
  • zmx729618
  • zmx729618
  • 2016年04月14日 15:38
  • 1537

C#与C/C++的交互

最近在编写Warensoft3D游戏引擎,并预计明年年初发布测试版本,底层引擎使用DirectX和MONO来编写,上层的逻辑使用C#来编写,因此编写了大量C#与C++互调的代码,现在经验写出来与大家分...
  • farmwang
  • farmwang
  • 2016年01月24日 20:38
  • 545

Android 平台下Java与C/C++的相互调用

Android主要使用的是Java语言进行编程的,应用层以及Framework使用的都是Java。对于java语言优势嘛,主要就是语法简单,跨平台。当然劣势也是非常的明显,执行效率和速度相比于C/C+...
  • Java_android_c
  • Java_android_c
  • 2016年10月11日 16:58
  • 680

c++和java交互

本篇简单的介绍cocos2dx 中c++和java的交互(以弹窗为列子) 1:这里我将自己写的java代码作为一个java lib让主项目引用。 创建步骤是.android create lib-...
  • Liu_coco
  • Liu_coco
  • 2017年02月04日 13:41
  • 592

强大的c/c++测试工具--lint简介

lint是最著名的C语言工具之一,是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析,一般由UNIX系统提供。 中文名l...
  • you_shou
  • you_shou
  • 2016年04月20日 11:28
  • 1742
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java和C/C++交互的字节工具类
举报原因:
原因补充:

(最多只允许输入30个字)