十六进制字符串转四字节数组转float

  • 相关概念
    • 小终端与大终端
  • 转换代码

在接触modbus报文过程中,发现报文中有的数值的表示方式为4字节浮点型;如下是我对四字节浮点型相关概念的理解与转换代码;

相关概念

以下仅是我个人对概念的理解,存在一点的不足和偏差;若想理解规范的概念请自查。

小终端与大终端

在了解大终端、小终端之前需了解高低位;高低位是以权位来区别的;
    数值:12        高位:1        低位:2        原因:十位的权重高于个位的权重

大终端: 高字节在前,ABCD
小终端: 低字节在前,DCBA
eg:大终端 3E 56 04 19         小终端 19 04 56 3E

转换代码

十六进制字符串转float类型有两步,第一:将十六进制字符串转为字节数组;第二:将字节数组转为float类型(如下两种方法);
/** 用于解析四字节转float* 何处调用:雷达流量计报文解析工具* */
public class HexToFloat {/**小终端 十六进制  四字节转float*/public static Float smallHextoFloat(String s) throws IOException {//s 为报文中截取的对应值 eg:19 04 56 3E  且数值的表示方式为四字节浮点型、小终端低字节在前String s1 = s.replace(" ", "");//将字符串中的空格去除String s2 = s.substring(6,8) + s.substring(4,6) + s.substring(2,4) + s.substring(0,2);/*将小终端换为大终端*/return bigHextoFloat(s2);}/**大终端 十六进制 四字节转float*/public static Float bigHextoFloat(String s) throws IOException {//s 为报文中截取的对应值 eg:3E 56 04 19  且数值的表示方式为四字节浮点型、大终端高字节在前String src = s.replace(" ", "");//将字符串中的空格去除/**将十六进制字符串转为字节数组*/byte[] ret = new byte[src.length() / 2];byte[] tmp = src.getBytes();for (int i = 0; i < (tmp.length / 2); i++) {ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);}//        流输入,适用于ME/SE环境/**将字节数组转为float类型数据 第一种*///默认大端数,如果小端数,可以先翻转数组DataInputStream dis=new DataInputStream(new ByteArrayInputStream(ret));float f=dis.readFloat();dis.close();return f;}/*** 将十六进制字符串转为字节数组*/public static byte uniteBytes(byte src0, byte src1) {byte _b0 = Byte.decode("0x" + new String(new byte[] {src0})).byteValue();_b0 = (byte) (_b0 << 4);byte _b1 = Byte.decode("0x" + new String(new byte[] { src1 })).byteValue();byte ret = (byte) (_b0 ^ _b1);return ret;}/*** 将字节数组转换成16进制字符串 第二种* @param bytes* @return*/public static String bytes2BinaryStr(byte[] bytes){StringBuffer binaryStr = new StringBuffer();for(int i=0;i<bytes.length;i++){String str = Integer.toBinaryString((bytes[i] & 0xFF) + 0x100).substring(1);binaryStr.append(str);}return binaryStr.toString();}}

四字节数组转为float相关推荐

  1. 【python】将bytes转换为float* 每四字节转化为float

    [python]将bytes转换为float* 每四字节转化为float FEATURE_SIZE = 256 def Bytes2Float32String(feature):x = "& ...

  2. C# 字节数组和Float互转

    C# 字节数组和Float互转 采用移位的方式进行转换,采用 与单片机类似的写法, 从而避免了大小端造成的问题 代码没有进行严格验证,可能存在错误 代码如下 // void U32ToBuf(UInt ...

  3. C语言将字节数组转为hex字符串

    最近项目组让我来做安全模块,在数据传输之前需要将数组转换文hex字符串进行传输,因为字节数组是不能进行传输的,这个方法非常有用,特此记录便于日后查阅,代码如下: static uint8_t hex_ ...

  4. php 字节数组转为字符串

    如下字节数组,将其转为字符串 (byte)51, (byte)86, (byte)25, (byte)104,             (byte)17, (byte)125, (byte)58, ( ...

  5. C语言 字节数组转为字符串

    本文章适用场景: #include <stdio.h>int main(void) {printf("\tmain enter \n");char* test1[128 ...

  6. c语言字节数组转化成字符串,C语言 字节数组转为字符串

    本文章适用场景: #include int main(void) { printf("\tmain enter \n"); char* test1[128] = {0x11,0x2 ...

  7. 数据流DataInput(Output)Stream 和 字节数组流 ByteArrayInput(Output) Stream

    一, 1个网络传输模型 在一个网络传输模型中. 假如1个电脑A想把1个double类型的值12345.678 传给另1个网络另一端的电脑B. 要如何实现呢? 大概分成几个步骤. 1. 转为字节数组(电 ...

  8. 学习-Java字符串之字符串、字符数组与字节数组间的使用之单词重新排序

    任务描述 本关任务:对给定单词重新排序(按照组成单词的字母升序排序). 相关知识 之前我们学习了字符串和数组,下面我们来了解一下字符串.字符数组.字节数组相互间的转换. 字符串转字符数组 使用字符串 ...

  9. 四字节与浮点数之间的转换(c语言实现)

    C语言中对于float类型的数据,主要使用4字节进行存储,以下为干货.实现四字节与浮点数之间的转换. 0.头文件添加 #include <math.h> 1.浮点数转换为四字节 void ...

最新文章

  1. 最新的GAN方法——PGGAN揭秘
  2. VC6里面的中文名字或者注释复制乱码解决
  3. CodeForces - 1288D Minimax Problem(二分+状态压缩)
  4. Python实现定时任务,定时采集数据,定时执行脚本程序都可以
  5. Eclipse下Pydev在线安装失败及解决办法
  6. vue 实现 tomato timer(蕃茄钟)
  7. 如何用思维导图快速理解PMBOK-PMP第六版教材
  8. 用友软件反结账,反记账以及删除凭证操作流程
  9. 微型计算机系统评课,微机课评课稿.doc
  10. mysql 单元测试_优学院MySQL数据库设计单元测试答案
  11. 图像识别中的边框回归笔记,终于搞明白了啊!
  12. uni-app 尺寸单位设置换算关系
  13. 【计算情与思】大学生学习和发展的思考和建议
  14. python学习知识点
  15. jQuery网格插件 ParamQuery
  16. Zabbix监控网络设备模板配置
  17. c语言圆周率小数点后500万位,圆周率500位
  18. Discuz插件提示:对不起,您安装的不是正版应用的解决办法
  19. STM32 无刷电机BLDC 1KW带刹开发板 PDF原理图 源代码 MDK源码
  20. CSS Border (边框)

热门文章

  1. 电子计算机技术的应用有哪些,计算机软件类包括哪些专业
  2. 文件清理工具——《超级处理器》应用
  3. 2019年秋招提前批面筋
  4. 大数据处理技术导论(1) | Datawhale组队学习46期
  5. VBA ---- 单、多条件筛选
  6. CentOS 7 安装FFTW3
  7. 央行发行数字货币对我们意味着什么?
  8. Swift 弹性动画教程
  9. # 关于解决路由器ADSL虚拟拨号与路由器动态IP(光纤)上网的问题
  10. 数据结构与算法之Python实现——栈