最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# modbus大小端的使用小結

 更新時間:2026年03月25日 10:08:50   作者:劍之所向  
本文主要介紹了c# modbus大小端的使用小結,解釋了大小端的本質和差異,Modbus協(xié)議和計算機中大小端的默認規(guī)則,及在實際開發(fā)中將計算機小端序的數(shù)據(jù)轉換為Modbus要求的大端序,感興趣的可以了解一下

一、先統(tǒng)一核心概念:大小端的本質

無論 Modbus 還是計算機,大小端的定義是完全相同的,核心是多字節(jié)數(shù)據(jù)的字節(jié)排列順序:

  • 大端序(Big-Endian):高字節(jié)(數(shù)值權重高的字節(jié))存放在低地址,低字節(jié)存放在高地址(“高位在前”)。
  • 小端序(Little-Endian):低字節(jié)存放在低地址,高字節(jié)存放在高地址(“低位在前”)。

舉個例子:數(shù)值 0x1234(十進制 4660),2 個字節(jié)的排列:

類型內存 / 傳輸順序(低地址→高地址)通俗理解
大端序0x12 → 0x34先寫高位,后寫低位
小端序0x34 → 0x12先寫低位,后寫高位

二、Modbus 與計算機大小端的核心差異

對比維度Modbus 協(xié)議計算機(CPU / 系統(tǒng))
默認規(guī)則強制推薦 / 標準是大端序(無例外)絕大多數(shù)是小端序(x86/x86_64 架構,如 Intel/AMD CPU);少數(shù)大端(如 PowerPC、SPARC)
應用范圍僅作用于寄存器數(shù)據(jù)傳輸 / 存儲:1. 單個 16 位寄存器內的字節(jié)排列2. 32 位數(shù)據(jù)跨多個寄存器的字序作用于內存中所有多字節(jié)數(shù)據(jù):1. 變量存儲(如 int、float)2. 文件 / 網(wǎng)絡傳輸前的原生排列
靈活性部分非標設備會自定義為小端序(需適配)系統(tǒng)級固定,開發(fā)者無法修改(只能手動轉換)

三、實戰(zhàn)舉例:為什么會感覺 “不同”?

以你之前的需求為例:要把計算機里的數(shù)值 18(0x0012)寫入 Modbus 寄存器,直觀體現(xiàn)差異:

1. 計算機(小端)的原生存儲

數(shù)值 0x0012 在 x86 計算機內存中存儲順序是:0x12(低字節(jié))→ 0x00(高字節(jié))。

2. Modbus(大端)的傳輸要求

Modbus 寄存器要求傳輸順序是:0x00(高字節(jié))→ 0x12(低字節(jié))。

3. 必須做的轉換(代碼層面)

如果直接把計算機的原生字節(jié)傳給 Modbus,數(shù)值會變成 0x1200(十進制 4608),完全錯誤!因此需要手動反轉字節(jié):

運行

// 計算機小端 → Modbus 大端 轉換示例
ushort value = 18; // 0x0012,計算機原生存儲為 0x12 0x00
ushort modbusValue = (ushort)(((value & 0xFF) << 8) | ((value & 0xFF00) >> 8));
// 轉換后 modbusValue = 0x0012(傳輸順序 0x00 → 0x12),符合 Modbus 要求

四、關鍵補充:32 位數(shù)據(jù)的 “雙重差異”

對于 32 位浮點數(shù)(如 25.5),差異會疊加:

  1. 計算機小端:浮點數(shù) 25.5 轉字節(jié)是 0x00 0x00 0x20 0x41(原生小端);
  2. Modbus 大端:需先反轉整個 4 字節(jié)為大端(0x41 0x20 0x00 0x00),再拆分為 2 個 16 位寄存器(0x4120、0x0000),按 “高字在前” 傳輸。

總結

  1. 大小端的定義本身相同,差異在于 Modbus 強制用大端,而主流計算機默認用小端;
  2. 開發(fā)中核心工作是把計算機小端的字節(jié)序轉換為 Modbus 要求的大端序(少數(shù)設備需轉小端);
  3. 無需糾結 “是否不同”,只需記?。鹤x取 Modbus 數(shù)據(jù)后要轉成計算機小端,寫入前要轉成 Modbus 要求的字節(jié)序。

簡單來說:Modbus 是 “規(guī)矩固定的外部設備”,計算機是 “習慣不同的內部系統(tǒng)”,你作為開發(fā)者只需要做好兩者之間的 “翻譯” 即可。

到此這篇關于c# modbus大小端的使用小結的文章就介紹到這了,更多相關c# modbus大小端內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

龙井市| 忻城县| 宜昌市| 宜兰市| 娄烦县| 安溪县| 广平县| 尚志市| 浮山县| 余干县| 榆社县| 蚌埠市| 济源市| 五峰| 睢宁县| 徐州市| 丹棱县| 荔波县| 浦城县| 新郑市| 安化县| 鄂尔多斯市| 高雄市| 延庆县| 会昌县| 锦屏县| 东乡县| 青浦区| 时尚| 慈利县| 温宿县| 靖远县| 陕西省| 益阳市| 平山县| 隆化县| 夏河县| 城步| 青铜峡市| 大渡口区| 库车县|