UPS電總協議 LENGTH和CHKSUM計算

2021-10-08 20:35:37 字數 1499 閱讀 6440

一.length計算

length共2個位元組,由lenid和lchksum組成,lenid表示info項的ascii碼位元組數,當 lenid=0時,info為空,即無該項。length傳輸中先傳高位元組,再傳低位元組,分四個ascii碼傳 送。

校驗碼的計算:d11d10d9d8+d7d6d5d4+d3d2d1d0,求和後模16的餘數取反加1。例如:

假設info項的ascii碼位元組數為18,即lenid = 0000 0001 0010。

d11d10d9d8+d7d6d5d4+d3d2d1d0 = 0000 + 0001 + 0010 = 0011,模16餘數為0011h,0011h

取反加1就是1101h,即lchksum為1101h。則:

length為 1101 0000 0001 0010,即d012h

demo:

byte lenid = 0x12;//十六進製制的12 = 十進位制的18

ushort data = lenid;

ushort data1 = data;

byte sum = 1;

while (data1 != 0)

byte checksum = (byte)(~(sum % 16) + 1);

short result = (short)(data + (checksum << 12));

string reslength = result.tostring("x");

二.chksum的計算

chksum的計算是除soi、eoi和chksum外,其他字元ascii碼值累加求和,所得結果模65536(協議中有誤,不清楚是65535還是65536,這裡計算用的是65536) 餘數取反加1。例:

收到或傳送的位元組序列是:「~1203400456abcdfefc72\r」,則資料幀最後五個字元「fc72\r」 中的fc72是chksum,其計算方法是:

1+2+0+ ···+a+b+···+f+e

= 31h + 32h + 30h + ···+ 41h + 42h +···+ 46h + 45h

= 038eh

其中1表示1的ascii碼值,e表示e的ascii碼值。038eh模65536餘數是038eh,038eh 取反加1就是fc72。

TLBs,頁結構cache和無效協議 閱讀總結

tlbs,paging structure caches,and their invalidation 1 處理器是通過 分頁機制 實現的線性位址到實體地址的轉換,這些轉換主要包括 1 指令的獲取和普通資料的訪問 2 推測執行的預取和記憶體訪問 這部分並不在 的執行路徑中,也不會引起缺頁異常 分頁機...

C 獲取磁碟總容量和剩餘容量

獲取指定驅動器的空間總大小 單位為b 只需輸入代表驅動器的字母即可 public static long getharddiskspace string str harddiskname return totalsize 獲取指定驅動器的剩餘空間總大小 單位為b 只需輸入代表驅動器的字母即可 pub...

C 獲取磁碟總容量和剩餘容量

獲取指定驅動器的空間總大小 單位為gb 只需輸入代表驅動器的字母即可 public static long getharddiskspace string str harddiskname return totalsize 獲取指定驅動器的剩餘空間總大小 單位為gb 只需輸入代表驅動器的字母即可 p...