一.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...