C 實現上位機1 解析modbus報頭

2021-08-28 19:34:07 字數 1458 閱讀 5226

1.高低位元組互換:

#define bigtolittle16(a)   (( ((unsigned short)(a) & 0xff00) >> 8)  | (((unsigned short)(a)& 0x00ff) << 8))
假如有乙個32位的資料 0x11223344,則在小端模式上的機器上儲存為如下的形式:

0x11223344這個數中 0x11 是高位元組(msb),0x44是地位元組(lsb)

討論大小端的時候最小單位是位元組

記憶體的畫法中採用的是向上增長的

可以將資料比作方向盤,順時鐘旋轉得到的在記憶體中的布局是小端儲存

至於大端模式用文字描述是,低位址上存放高位元組,高位址上存放低位元組。

測試**:

unsigned short a=sizeof(morer_protocol_head);

printf("a:%d\n",a);

unsigned short b=a&0xff00;

unsigned short e=b>>8;

unsigned short c=a&0x00ff;

unsigned short d=c<<8;

printf("b:%d,e:%d,c:%d,d:%d\n",b,e,c,d);

執行結果:

2.memcpy函式,

void *memcpy(void *dest, const void *src, size_t n);

從源src所指的記憶體位址的起始位置開始拷貝n個位元組到目標dest所指的記憶體位址的起始位置中

定義結構體:

struct mbap_head

};

將乙個結構體拷貝到乙個字元陣列時,依次將結構體的成員變數拷貝到字元陣列中,拷貝結果如下圖:

源**:

//#include "stdafx.h"

struct morer_protocol_head

};struct mbap_head

};#define bigtolittle16(a) (( ((unsigned short)(a) & 0xff00) >> 8) | (((unsigned short)(a)& 0x00ff) << 8))

#define pack_max_size 512

int _tmain(int argc, _tchar* argv)

c 上位機開發3

從.net framework 2.0開始,c 提供了serialport類用於實現串列埠控制。命名空間 system.io.ports。其中詳細成員介紹參看msdn文件。下面介紹其常用的字段 方法和事件。1.常用字段 名稱說明 portname 獲取或設定通訊埠 baudrate 獲取或設定序列波...

C 上位機簡單使用

寫的比較簡單 破解時間限制的補丁 提取碼1123 如下 示例 opcserver objserver opcgroups objgroups opcgroup objgroup opcitems objitems array stritemids array lclienthandles array...

C 上位機軟體 串列埠

using system.io.ports 串列埠類 serialport 屬於該命名空間 string portstr serialport.getportnames 搜尋當前裝置下的串列埠 該方法為串列埠類的靜態方法,呼叫方法 類名 函式名public serialport sp newseri...