本期解读:

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的更多相关文章

  1. 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案

    简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...

  2. Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备

    本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发送.接 ...

  3. itest 开源测试管理项目中封装的下拉列表小组件:实现下拉列表使用者前后端0行代码

    导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景       像easy ui 之类的纯前端组件,也有下拉列表组件,但是使用的时候,每个下拉列表,要配一个URL ...

  4. 腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一)

    腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一) 在看Accept阶段代码之前, 我们再回想一下 Basic Paxos算法; 1.  Basic Paxos 算法是为 ...

  5. Android MVP模式 谷歌官方代码解读

    Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...

  6. msysGit管理GitHub代码

    msysGit管理GitHub代码   代码的管理,在日常开发中是很重要的环节,程序员的修炼三部曲——版本控制,单元测试,项目自动化. 本篇就简单的说说通过msysGit来管理GitHub中的代码,实 ...

  7. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  8. Google免费的SVN服务器管理VS2010代码

    原文:Google免费的SVN服务器管理VS2010代码 前言 Google免费为我们提供了代码管理的SVN服务器.首先我这里用的Win7 64的电脑系统,用VS2010进行的代码开发.这里管理代码需 ...

  9. spring JdbcTemplate 在itest 开源测试管理项目中的浅层(5个使用场景)封装

    导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景, 在做项目的时候,用的JPA ,有些复杂查询,比如报表用原生的JdbcTemplate ,很不方便;传参也不方便 ...

  10. weex官方demo weex-hackernews代码解读(上)

    一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...

随机推荐

  1. stm32cubemx+freertos+中断实现IIC从机

    最近做一个项目需要将stm32配置为iic的从机模式来响应总线的读写需求,看了网上的大部分资料讲解的都不是很全面,因此这里做一个小分享. iic通信流程 要编写iic从机模式的代码,就得对iic得整个 ...

  2. .NET周刊【5月第4期 2025-05-25】

    国内文章 .NET 的全新低延时高吞吐自适应 GC - Satori GC https://www.cnblogs.com/hez2010/p/18889954/the-new-satori-gc-f ...

  3. js判断一个变量是否存在值得简单方法

    在编码过程中,有时候我们需要对一个变量判断其是否有值,这里有一种比较不错的方法判断: !!variable //返回True为存在值,返回False为不存在值 注意是双感叹号"!!" ...

  4. ARCHIV_CREATE_FILE 员工头像上传

    *&---------------------------------------------------------------------* *& Report ZHRR_011 ...

  5. 基于袋鼠云实时开发平台开发 FlinkSQL 任务的实践探索

    随着业务的发展,实时场景在各个⾏业中变得越来越重要.⽆论是⾦融.电商还是物流,实时数据处理都成为了其中的关键环节.Flink 凭借其强⼤的流处理特性.窗⼝操作以及对各种数据源的⽀持,成为实时场景下的⾸ ...

  6. SQL Server 插入自增列

    set identity_insert t on insert into t (id, name) values(1, 'sqlstudy') set identity_insert t off ht ...

  7. 研究将有pid和id的List<Map<String,Map>>组成树

    树如图所示: 方法一:用递归的方法,思路清晰但效率很慢并且不灵活: 思路:递归查询,使用深度优先算法,第一遍找A-->B-->D,将D加到B中,再找B->E,将E加到B中,然后将B加 ...

  8. Rust修仙之道 第十一章 构型境 · 设计模式之道

    第十一章:构型境 · 设计模式之道 "千术可构,格局需明:结构得法,道可延年." 顾行云正式承担"魂核驱动阵"的重构之任,发现需求纷繁.参数繁多.状态变化复杂. ...

  9. 前端开发系列107-工程化篇之Bower的安装和使用

    本文主要介绍前端开发中常用的包管理工具Bower,具体包括Bower的基本情况.安装.使用和常见命令等内容,最后还介绍了依赖树管理的常见方式以及Bower采用的策略并进行了比较. 1.0 关于Bowe ...

  10. leetcode 151 翻转字符串

    简介 推荐使用API code class Solution { public String reverseWords(String s) { s = s.trim(); // 正则撇皮连续的空白字符 ...