MyEMS开源能源管理系统核心代码解读026
本期解读:
Modbus数据字节翻转算法:myems-modbus-tcp/byte_swap.py
源代码链接:https://gitee.com/myems/myems/blob/master/myems-modbus-tcp/byte_swap.py?sessionid=1133741851
以下是对当前文件的代码解读:
这段代码提供了两个函数,byte_swap_32_bit 和 byte_swap_64_bit,用于交换32位和64位数据中相邻字节的位置。这种操作并不涉及大端序和小端序的转换,而是简单地将数据中的相邻字节位置互换。
byte_swap_32_bit 函数
这个函数用于交换32位数据(4字节)中相邻字节的位置。例如,将数据 abcd 转换为 badc。
1.首先,检查输入数据的类型。如果是浮点数(float),则先将其转换为32位无符号整数(uint32)。
2.然后,通过位移和位掩码操作提取并重新排列字节。具体来说,将原始数据的高位字节向右移动8位,低位字节向左移动8位,然后通过位或操作(|)组合这些字节。
3.如果输入是浮点数,最后将重新排列后的整数转换回浮点数并返回;如果不是浮点数,直接返回重新排列后的整数。
byte_swap_64_bit 函数
这个函数用于交换64位数据(8字节)中相邻字节的位置。例如,将数据 abcdefgh 转换为 badcfehg。
1.类似于32位函数,首先检查输入数据的类型。如果是浮点数(float),则先将其转换为64位无符号整数(uint64)。
2.通过位移和位掩码操作提取并重新排列字节。这里涉及到更多的字节,因此操作更为复杂。每个字节都通过向右或向左移动8位来重新定位,然后通过位或操作组合。
3.如果输入是浮点数,最后将重新排列后的整数转换回浮点数并返回;如果不是浮点数,直接返回重新排列后的整数。
这两个函数提供了一种方法来交换数据中相邻字节的位置,这在处理某些特定的数据格式或通信协议时非常有用。它们不是进行大端序和小端序转换的标准方法,而是一种特殊的字节重排技术。
3.如果输入是浮点数,最后将重新排列后的整数转换回浮点数并返回;如果不是浮点数,直接返回重新排列后的整数。
这两个函数提供了一种方法来交换数据中相邻字节的位置,这在处理某些特定的数据格式或通信协议时非常有用。它们不是进行大端序和小端序转换的标准方法,而是一种特殊的字节重排技术。
这两个函数提供了一种方法来交换数据中相邻字节的位置,这在处理某些特定的数据格式或通信协议时非常有用。它们不是进行大端序和小端序转换的标准方法,而是一种特殊的字节重排技术。
MyEMS开源能源管理系统核心代码解读026的更多相关文章
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...
- Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备
本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发送.接 ...
- itest 开源测试管理项目中封装的下拉列表小组件:实现下拉列表使用者前后端0行代码
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景 像easy ui 之类的纯前端组件,也有下拉列表组件,但是使用的时候,每个下拉列表,要配一个URL ...
- 腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一)
腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一) 在看Accept阶段代码之前, 我们再回想一下 Basic Paxos算法; 1. Basic Paxos 算法是为 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...
- msysGit管理GitHub代码
msysGit管理GitHub代码 代码的管理,在日常开发中是很重要的环节,程序员的修炼三部曲——版本控制,单元测试,项目自动化. 本篇就简单的说说通过msysGit来管理GitHub中的代码,实 ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- Google免费的SVN服务器管理VS2010代码
原文:Google免费的SVN服务器管理VS2010代码 前言 Google免费为我们提供了代码管理的SVN服务器.首先我这里用的Win7 64的电脑系统,用VS2010进行的代码开发.这里管理代码需 ...
- spring JdbcTemplate 在itest 开源测试管理项目中的浅层(5个使用场景)封装
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景, 在做项目的时候,用的JPA ,有些复杂查询,比如报表用原生的JdbcTemplate ,很不方便;传参也不方便 ...
- weex官方demo weex-hackernews代码解读(上)
一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...
随机推荐
- stm32cubemx+freertos+中断实现IIC从机
最近做一个项目需要将stm32配置为iic的从机模式来响应总线的读写需求,看了网上的大部分资料讲解的都不是很全面,因此这里做一个小分享. iic通信流程 要编写iic从机模式的代码,就得对iic得整个 ...
- .NET周刊【5月第4期 2025-05-25】
国内文章 .NET 的全新低延时高吞吐自适应 GC - Satori GC https://www.cnblogs.com/hez2010/p/18889954/the-new-satori-gc-f ...
- js判断一个变量是否存在值得简单方法
在编码过程中,有时候我们需要对一个变量判断其是否有值,这里有一种比较不错的方法判断: !!variable //返回True为存在值,返回False为不存在值 注意是双感叹号"!!" ...
- ARCHIV_CREATE_FILE 员工头像上传
*&---------------------------------------------------------------------* *& Report ZHRR_011 ...
- 基于袋鼠云实时开发平台开发 FlinkSQL 任务的实践探索
随着业务的发展,实时场景在各个⾏业中变得越来越重要.⽆论是⾦融.电商还是物流,实时数据处理都成为了其中的关键环节.Flink 凭借其强⼤的流处理特性.窗⼝操作以及对各种数据源的⽀持,成为实时场景下的⾸ ...
- SQL Server 插入自增列
set identity_insert t on insert into t (id, name) values(1, 'sqlstudy') set identity_insert t off ht ...
- 研究将有pid和id的List<Map<String,Map>>组成树
树如图所示: 方法一:用递归的方法,思路清晰但效率很慢并且不灵活: 思路:递归查询,使用深度优先算法,第一遍找A-->B-->D,将D加到B中,再找B->E,将E加到B中,然后将B加 ...
- Rust修仙之道 第十一章 构型境 · 设计模式之道
第十一章:构型境 · 设计模式之道 "千术可构,格局需明:结构得法,道可延年." 顾行云正式承担"魂核驱动阵"的重构之任,发现需求纷繁.参数繁多.状态变化复杂. ...
- 前端开发系列107-工程化篇之Bower的安装和使用
本文主要介绍前端开发中常用的包管理工具Bower,具体包括Bower的基本情况.安装.使用和常见命令等内容,最后还介绍了依赖树管理的常见方式以及Bower采用的策略并进行了比较. 1.0 关于Bowe ...
- leetcode 151 翻转字符串
简介 推荐使用API code class Solution { public String reverseWords(String s) { s = s.trim(); // 正则撇皮连续的空白字符 ...