package com.zjf.mapper;
import java.io.*;
import java.nio.ByteOrder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/**
* 数字转字节数组工具类
*/
public class BitConverter {
public static byte[] objectToByte(Object obj){
byte[] bytes;
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(obj);
bytes = bo.toByteArray();
bo.close();
oo.close();
}
catch(Exception ae) {
try {
throw ae;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return(bytes);
}
/**
* 以字节数组的形式返回指定的布尔值
*
* @param data 一个布尔值
* @return 长度为 1 的字节数组
*/
public static byte[] getBytes(boolean data) {
byte[] bytes = new byte[1];
bytes[0] = (byte) (data ? 1 : 0);
return bytes;
}
/**
* 以字节数组的形式返回指定的 16 位有符号整数值
*
* @param data 要转换的数字
* @return 长度为 2 的字节数组
*/
public static byte[] getBytes(short data) {
byte[] bytes = new byte[2];
if (isLittleEndian()) {
bytes[0] = (byte) (data & 0xff);
bytes[1] = (byte) ((data & 0xff00) >> 8);
} else {
bytes[1] = (byte) (data & 0xff);
bytes[0] = (byte) ((data & 0xff00) >> 8);
}
return bytes;
}
/**
* 以字节数组的形式返回指定的 Unicode 字符值
*
* @param data 要转换的字符
* @return 长度为 2 的字节数组
*/
public static byte[] getBytes(char data) {
byte[] bytes = new byte[2];
if (isLittleEndian()) {
bytes[0] = (byte) (data);
bytes[1] = (byte) (data >> 8);
} else {
bytes[1] = (byte) (data);
bytes[0] = (byte) (data >> 8);
}
return bytes;
}
/**
* 以字节数组的形式返回指定的 32 位有符号整数值
*
* @param data 要转换的数字
* @return 长度为 4 的字节数组
*/
public static byte[] getBytes(int data) {
byte[] bytes = new byte[4];
if (isLittleEndian()) {
bytes[0] = (byte) (data & 0xff);
bytes[1] = (byte) ((data & 0xff00) >> 8);
bytes[2] = (byte) ((data & 0xff0000) >> 16);
bytes[3] = (byte) ((data & 0xff000000) >> 24);
} else {
bytes[3] = (byte) (data & 0xff);
bytes[2] = (byte) ((data & 0xff00) >> 8);
bytes[1] = (byte) ((data & 0xff0000) >> 16);
bytes[0] = (byte) ((data & 0xff000000) >> 24);
}
return bytes;
}
/**
* 以字节数组的形式返回指定的 64 位有符号整数值
*
* @param data 要转换的数字
* @return 长度为 8 的字节数组
*/
public static byte[] getBytes(long data) {
byte[] bytes = new byte[8];
if (isLittleEndian()) {
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);
} else {
bytes[7] = (byte) (data & 0xff);
bytes[6] = (byte) ((data >> 8) & 0xff);
bytes[5] = (byte) ((data >> 16) & 0xff);
bytes[4] = (byte) ((data >> 24) & 0xff);
bytes[3] = (byte) ((data >> 32) & 0xff);
bytes[2] = (byte) ((data >> 40) & 0xff);
bytes[1] = (byte) ((data >> 48) & 0xff);
bytes[0] = (byte) ((data >> 56) & 0xff);
}
return bytes;
}
/**
* 以字节数组的形式返回指定的单精度浮点值
*
* @param data 要转换的数字
* @return 长度为 4 的字节数组
*/
public static byte[] getBytes(float data) {
return getBytes(Float.floatToIntBits(data));
}
/**
* 以字节数组的形式返回指定的双精度浮点值
*
* @param data 要转换的数字
* @return 长度为 8 的字节数组
*/
public static byte[] getBytes(double data) {
return getBytes(Double.doubleToLongBits(data));
}
/**
* 将指定字符串中的所有字符编码为一个字节序列
*
* @param data 包含要编码的字符的字符串
* @return 一个字节数组,包含对指定的字符集进行编码的结果
*/
/**
* 将指定字符串中的所有字符编码为一个字节序列
*
* @param data 包含要编码的字符的字符串
* @param charsetName 字符集编码
* @return 一个字节数组,包含对指定的字符集进行编码的结果
*/
public static byte[] getBytes(String data, String charsetName) {
return data.getBytes(Charset.forName(charsetName));
}
/**
* 返回由字节数组转换来的布尔值
*
* @param bytes 字节数组
* @return 布尔值
*/
public static boolean toBoolean(byte[] bytes) {
return bytes[0] == 0 ? false : true;
}
/**
* 返回由字节数组中的指定的一个字节转换来的布尔值
*
* @param bytes 字节数组
* @param startIndex 起始下标
* @return 布尔值
*/
public static boolean toBoolean(byte[] bytes, int startIndex) {
return toBoolean(copyFrom(bytes, startIndex, 1));
}
/**
* 返回由字节数组转换来的 16 位有符号整数
*
* @param bytes 字节数组
* @return 由两个字节构成的 16 位有符号整数
*/
public static short toShort(byte[] bytes) {
if (isLittleEndian()) {
return (short) ((0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)));
} else {
return (short) ((0xff & bytes[1]) | (0xff00 & (bytes[0] << 8)));
}
}
/**
* 返回由字节数组中的指定的两个字节转换来的 16 位有符号整数
*
* @param bytes 字节数组
* @param startIndex 起始下标
* @return 由两个字节构成的 16 位有符号整数
*/
public static short toShort(byte[] bytes, int startIndex) {
return toShort(copyFrom(bytes, startIndex, 2));
}
/**
* 返回由字节数组转换来的 Unicode 字符
*
* @param bytes 字节数组
* @return 由两个字节构成的字符
*/
public static char toChar(byte[] bytes) {
if (isLittleEndian()) {
return (char) ((0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)));
} else {
return (char) ((0xff & bytes[1]) | (0xff00 & (bytes[0] << 8)));
}
}
/**
* 返回由字节数组中的指定的两个字节转换来的 Unicode 字符
*
* @param bytes 字节数组
* @param startIndex 起始下标
* @return 由两个字节构成的字符
*/
public static char toChar(byte[] bytes, int startIndex) {
return toChar(copyFrom(bytes, startIndex, 2));
}
/**
* 返回由字节数组转换来的 32 位有符号整数
*
* @param bytes 字节数�
九点两刻
- 粉丝: 636
- 资源: 16
最新资源
- 永磁同步电机与无刷直流电机的模型预测控制:Matlab Simulink仿真下的性能优势与精确响应,永磁同步电机(PMSM)无刷直流电机(BLDC)有限集模型预测控制(MPC) 电机MPC控制 mat
- 基于粒子群算法的分布式电源优化调度策略:IEEE33节点配电网的经济运行与环保考量,基于粒子群算法的配电网日前优化调度 采用IEEE33节点配电网搭建含风光,储能,柴油发电机和燃气轮机的经济调度模型
- 永磁同步电机PMSM线性死区补偿仿真模型的研究:非固定值补偿策略与零电流箝位效果分析,永磁同步电机PMSM线性死区补偿仿真模型,该模型特点如下: 死区补偿的研究点主要是两个,一个是怎么判断过零点?一个
- 基于模型预测控制的永磁同步电机MATLAB代码实现,包含电流环与速度环的不同MPC策略实现,基于模型预测控制MPC的永磁同步电机MATLAB代码 包含单电流环MPC仿真(仅电流环使用MPC策略,速度环
- AUTOSAR学习指南:基础知识、Simulink开发、操作系统移植及电机控制器软件开发教程,AUTOSAR学习资料 包括AUTOSAR基础知识的介绍 AUTOSAR在simulink中的开发、实现和
- ,三菱动态密码解锁程序 程序功能 1 本程序第一次使用时设请定授权天数\\\"RunDAYs\\\"如90天,系统会在授权日期 2接近倒数5天时,会有一个付款提醒 (标签Approaching-d
- 基于HDL实现的MIPI IP核适用于多种FPGA芯片 实现双mipi相机采集与mipi相机转yuv格式传输方案,mipi IP核,纯HDL实现,4lane传输 适用于所有型号FPGA芯片,纯逻辑实现
- 基于LabVIEW的双通道波形发生器报告:可生成多种基本波形,同时展示两个信号在同一波形图的功能代码成品展示,基于labview的双通道波形发生器报告可以生成正弦波、方波、三角波、锯齿波、白噪声等
- 基于LSTM的多变量输入单输出回归预测模型:直观对比真实值与预测值,附详细注释与评价指标打印功能,LSTM回归预测,多变量输入,单输出 直接替数据就可以使用,不需要对程序大幅修改 程序内有详细注释
- 基于深度强化学习的混合动力汽车能量管理策略详解:DQN算法功率分配与奖励函数优化,基于深度强化学习的混合动力汽车能量管理策略 1.利用DQN算法控制电池和发动机发电机组的功率分配 2.状态量为需求功率
- Simulink永磁风机飞轮储能系统二次调频特性分析与参数优化 基于文献参考,探讨系统频率特性及两区域系统二次调频参数调整策略 ,simulink永磁风机飞轮储能二次调频,系统频率特性如下,可改变调
- 电力系统短路故障分析与电压暂降特征研究:三相不对称短路及其MATLAB仿真分析,1.电力系统短路故障引起电压暂降 2.不对称短路故障分析 包括:共两份自编word+相应matlab模型 1.短路故
- 基于扩展卡尔曼滤波EKF的车辆状态估计:涵盖横纵向位置、轨迹、横摆角及速度等参数的详细分析(附Simulink模型与MATLAB代码及文献参考),基于扩展卡尔曼滤波EKF的车辆状态估计 估计的状态有
- 电机模型介绍:八级48槽磁钢双一字布置,可运行计算损耗与效率图,峰值功率达150kw,额定75kw,适用于学习与改进设计 ,电机模型 motorCAD电机模型,八级48槽,磁钢双一字布置,完全可以运行
- 针对不平衡电网电压下的虚拟同步发电机VSG三相电流平衡控制策略解析及相关文档赠送,不平衡电网电压下同步发电机VSG-控制三相电流平衡,送相关文档 VSG控制,正负序分离,正负序控制,电压电流双环
- MATLAB仿真下的同步磁阻电机ESO与PR控制闭环系统:转速电流性能优化,MATLAB仿真同步磁阻电机扩张状态观测器eso+PR控制(谐振控制)已闭环,转速电流良好 ,核心关键词:MATLAB仿真
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈