十六进制字符串转四字节数组转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. Idea(二) 解决IDEA卡顿问题及相关基本配置(转)
  2. HDU2023 求平均成绩
  3. 小程序确定取消弹窗_浅析微信小程序modal弹窗关闭默认会执行cancel问题
  4. 在有序数列里插入新元素(C语言)
  5. python emoji 表情过滤
  6. bootstrap table 适应移动端_前端框架bootstrap和layui有什么区别
  7. 可以在函数中间打点了,以分析bpf_prog_load函数为例
  8. HDU2544:最短路(Dijkstra)
  9. 关于websocket兼容IE版本
  10. 计算机没鼠标怎么,电脑没鼠标怎么开启系统
  11. 盖洛普Q12测评法(转载)
  12. 计算机网络管理员四级理论知识试卷,2014计算机网络管理员模拟试题及答案
  13. React的调和过程(Reconciliation)
  14. 电脑怎么压缩jpg图片?如何压缩照片并保持清晰?
  15. Java中的Stream和方法引用【JDK 1.8之后】
  16. 印制板通孔板、盲埋孔板及一阶、二阶板的区别
  17. c语言测试软件的编写,用c语言编写智商测试软件
  18. Freeline配置使用过程
  19. 亚马逊CEO Andy 2021年收入2.12亿美元?
  20. 国家促进普通高校毕业生就业的政策

热门文章

  1. 一个人物脚下踩着的地方会突起来的效果
  2. android mi4 分辨率,小米11屏幕分辨率怎么样 小米11屏幕分辨率是多少
  3. iphone--关于iphone多国语言设置
  4. 湖南大学头歌实训小测
  5. 【office考试】2016年计算机一级Office考试题(带答案)
  6. 针对IRIS数据的特征选择与提取方法研究(模式识别第四次作业)
  7. 百鬼夜行第一章:小马过河
  8. linux命令管道符号作用,linux认证:unix中管道符让输入源不起作用
  9. html相框自动生成功能,网页制作HTML5拖放API实现自动生成相框功能
  10. APK反编译 解包 修改 打包 流程