亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? main.pas

?? CRC運(yùn)算
?? PAS
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    GenPoly8Edit: TEdit;
    GenPoly16Edit: TEdit;
    GenPoly32Edit: TEdit;
    TestCRC8Btn: TButton;
    TestCRC16Btn: TButton;
    TestCRC32Btn: TButton;
    CalCRC8Btn: TButton;
    CalCRC16Btn: TButton;
    CalCRC32Btn: TButton;
    CRC8ResultEdit: TEdit;
    CRC16ResultEdit: TEdit;
    CRC32ResultEdit: TEdit;
    CRCStartEdit: TEdit;
    Label4: TLabel;
    Panel1: TPanel;
    HighFirstRB: TRadioButton;
    Label5: TLabel;
    LowFirstRB: TRadioButton;
    Panel2: TPanel;
    Label6: TLabel;
    BitCalcRB: TRadioButton;
    TableCalcRB: TRadioButton;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    FlipResultCB: TCheckBox;
    procedure TestCRC16BtnClick(Sender: TObject);
    procedure TestCRC8BtnClick(Sender: TObject);
    procedure TestCRC32BtnClick(Sender: TObject);
    procedure CalCRC16BtnClick(Sender: TObject);
    procedure CalCRC8BtnClick(Sender: TObject);
    procedure CalCRC32BtnClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  // 生成多項(xiàng)式的值(多項(xiàng)式因子)
  // 注意:CRC16是數(shù)據(jù)流的高位先計(jì)算,多項(xiàng)式因子不變
  // 而CRC32和CRC8都是數(shù)據(jù)流的低位先計(jì)算,所以多項(xiàng)式因子的高/低位對(duì)調(diào)
  // 比如CRC32由$04C11DB7變?yōu)?EDB88320,CRC8由$31變?yōu)?8C
  GenPoly32: DWord; // CRC-32 = X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
                    // 00000100 11000001 00011101 10110111($04C11DB7) 低位先行($EDB88320)
  GenPoly16: Word;  // CRC-CCITT16 = X16+X12+X5+1, 00010000 00100001($1021) 高位先行
                    // CRC-16      = X16+X15+X2+1, 10000000 00000101($8005) 高位先行
  GenPoly8:  Byte;  // CRC-8 = X8+X5+X4+1, 00110001($31) 低位先行($8C)
  GenPoly4:  Byte;  // CRC-4 = X4+X1+1, 0011($03)

  CRC32Tab: array [0..255] of DWord; // CRC32快速計(jì)算查表
  CRC16Tab: array [0..255] of Word;  // CRC16快速計(jì)算查表
  CRC8Tab : array [0..255] of Byte;  // CRC8 快速計(jì)算查表

  HighFirst: Boolean; // 數(shù)據(jù)流高位先行的標(biāo)志

implementation

{$R *.DFM}

///////////////////////////////////////////////////////////
// 16位CRC:按位計(jì)算,速度最慢,占用空間最少
///////////////////////////////////////////////////////////
function CalCRC16(data, crc, genpoly: Word): Word;
var i: Integer;
begin
  if HighFirst then // 數(shù)據(jù)流高位先行
  begin
    // 方法1:摘自XMODEM協(xié)議
    crc := crc xor (data shl 8);
    for i:=0 to 7 do
      if (crc and $8000) <> 0 then // 只測(cè)試最高位
        crc := (crc shl 1) xor genpoly // 最高位為1,移位和異或處理
      else crc := crc shl 1; // 否則只移位(乘2)
    Result := crc;
  {
    // 方法2:算法有些不同,但結(jié)果相同
    data := data shl 8; // 移到高字節(jié)
    for i:=7 downto 0 do
    begin
      if ((data xor crc) and $8000) <> 0 then // 只測(cè)試最高位
        crc := (crc shl 1) xor genpoly // 最高位為1,移位和異或處理
      else crc := crc shl 1; // 否則只移位(乘2)
      data := data shl 1; // 處理下一位
    end;
    Result := crc;

    // 方法3:摘自<<CRC算法原理及C語(yǔ)言實(shí)現(xiàn)>>
    for i:=7 downto 0 do
    begin
      if (crc and $8000) <> 0 then
        crc := (crc*2) xor genpoly // 余式CRC乘以2再求CRC
      else crc := crc*2;
      if (data and (1 shl i)) <> 0 then
        crc := crc xor genpoly; // 再加上本位的CRC
    end;
    Result := crc;
  }
  end
  else // 數(shù)據(jù)流低位先行
  begin
    // 方法1:摘自XMODEM協(xié)議
    // CRC-CCITT多項(xiàng)式因子$8408,CRC-16多項(xiàng)式因子$A001
    // 高位先行和低位先行的計(jì)算結(jié)果不同
    crc := crc xor data;
    for i:=0 to 7 do
      if (crc and $01) <> 0 then // 只測(cè)試最低位
        crc := (crc shr 1) xor genpoly // 最低位為1,移位和異或處理
      else crc := crc shr 1; // 否則只移位(除2)
    Result := crc;
  end;
{
; MCS51的CRC-16計(jì)算函數(shù)(多項(xiàng)式因子為$1021, 高位先行)
; 調(diào)用:CRC16H/CRC16L=原CRC16值(16位,初始值為0000h),A=待計(jì)算數(shù)據(jù)(8位)
; 結(jié)果:CRC16H/CRC16L=計(jì)算后的CRC16值(16位)
CalCRC16:
        push  00h          ; Save R0
        push  acc          ; Save Acc
        mov   r0,#08       ; 8 Bits In A Byte
        xrl   CRC16H,a     ; CRC16H ^= Data
lp1:    clr   c            ; 0 Into Low Bit
        mov   a,CRC16L     ; CRC16H/CRC16L <<= 1
        rlc   a
        mov   CRC16L,a
        mov   a,CRC16H
        rlc   a
        mov   CRC16H,a
        jnc   lp2          ; Skip If Bit 15 Wasn't Set
        xrl   CRC16H,#10h  ; CRC16H/CRC16L ^= $1021
        xrl   CRC16L,#21h
lp2:    djnz  r0,lp1       ; Repeat R0 More Times
        pop   acc          ; Recover Acc
        pop   00h          ; Recover R0
        ret
}
end;

///////////////////////////////////////////////////////////
// 16位CRC:生成CRC16表(256項(xiàng)),用于快速查表計(jì)算
// 在程序初始化時(shí)就先調(diào)用,預(yù)先生成CRC16Tab[256]查表數(shù)據(jù)
///////////////////////////////////////////////////////////
procedure InitCRC16Table(genpoly: DWord);
var i: Integer;
begin
  for i:=0 to 255 do
    CRC16Tab[i] := CalCRC16(i,0,genpoly);
end;

///////////////////////////////////////////////////////////
// 16位CRC:通過(guò)查表快速計(jì)算,速度快,占用空間多
// 要預(yù)先生成CRCTab[256]查表數(shù)據(jù)
///////////////////////////////////////////////////////////
function QuickCRC16(data, crc: Word): Word;
begin
  if HighFirst then // 數(shù)據(jù)流高位先行
  begin
    // 方法1:按字節(jié)計(jì)算CRC,通過(guò)查表(256項(xiàng))快速計(jì)算
    //        速度最快,占用空間最多,需要256項(xiàng)數(shù)據(jù)的表格空間
    crc := CRC16Tab[(crc shr 8) xor data] xor (crc shl 8);
    Result := crc;
  {
    // 方法2:按半字節(jié)計(jì)算CRC,通過(guò)查表(16項(xiàng))快速計(jì)算
    //        速度比較快,占用空間也比較少,只需要表格的前16項(xiàng)數(shù)據(jù)
    crc := CRCTab[(crc shr 12) xor (data shr 4)] xor (crc shl 4);
    crc := CRCTab[(crc shr 12) xor (data and $0F)] xor (crc shl 4);
    Result := crc;
  }
  end
  else // 數(shù)據(jù)流低位先行
  begin
    crc := CRC16Tab[Byte(crc xor data)] xor (crc shr 8);
    Result := crc;
  end;
{
; MCS51的CRC-16快速查表計(jì)算函數(shù)
; 要預(yù)先生成CRC16查表數(shù)據(jù),起始地址CRC16Tab,按高/低字節(jié)順序存放(512字節(jié))
; 調(diào)用:CRC16H/CRC16L=原CRC16值(16位,初始值為0000h),A=待計(jì)算數(shù)據(jù)(8位)
; 結(jié)果:CRC16H/CRC16L=計(jì)算后的CRC16值(16位)
QuickCRC16:
        push  dph             ; Save DPH
        push  dpl             ; Save DPL
        push  acc             ; Save Acc
        mov   dptr,#CRC16Tab  ; Point To Table
        xrl   a,CRC16H        ; XOR High Of CRC With Character
        call  UTIL_ADCAD      ; Add 'A' To 'DPTR'
        call  UTIL_ADCAD      ; Add 'A' To 'DPTR' (Yes, Twice)
        clr   a               ; Get High Byte From Table Entry
        movc  a,@a+dptr
        xrl   a,CRC16L        ; XOR With Low
        mov   CRC16H,a        ; Store To High Of CRC
        clr   a               ; Get Low Byte From Table Entry
        inc   dptr
        movc  a,@a+dptr
        mov   CRC16L,a        ; Store To Low Of CRC
        pop   acc             ; Recover Acc
        pop   dpl             ; Recover DPL
        pop   dph             ; Recover DPH
        ret
}
end;









///////////////////////////////////////////////////////////
// 8位CRC:按位計(jì)算,速度最慢,占用空間最少
///////////////////////////////////////////////////////////
function CalCRC8(data, crc, genpoly: Byte): Byte;
var i: Integer;
begin
  if HighFirst then // 數(shù)據(jù)流高位先行
  begin
    crc := crc xor data;
    for i:=0 to 7 do
      if (crc and $80) <> 0 then // 只測(cè)試最高位
        crc := (crc shl 1) xor genpoly // 最高位為1,移位和異或處理
      else crc := crc shl 1; // 否則只移位(乘2)
    Result := crc;
  end
  else // 數(shù)據(jù)流低位先行
  begin
    // 方法1:摘自XMODEM協(xié)議
    crc := crc xor data;
    for i:=0 to 7 do
      if (crc and $01) <> 0 then // 只測(cè)試最低位
        crc := (crc shr 1) xor genpoly // 最低位為1,移位和異或處理
      else crc := crc shr 1; // 否則只移位(除2)
    Result := crc;
  {
    // 方法2:算法有些不同,但結(jié)果相同
    for i:=0 to 7 do
    begin
      if ((data xor crc) and $01) <> 0 then // 只測(cè)試最低位
        crc := (crc shr 1) xor genpoly // 最低位為1,移位和異或處理
      else crc := crc shr 1;           // 否則只移位(除2)
      data := data shr 1; // 處理下一位
    end;
    Result := crc;
  }
  end;
{
; MCS51的CRC-8計(jì)算函數(shù)(多項(xiàng)式因子為$8C, 低位先行)
; 調(diào)用:B=原CRC8值(8位,初始值為00h),A=待計(jì)算數(shù)據(jù)(8位)
; 結(jié)果:B=計(jì)算后的CRC8值(8位)
CalCRC8:
        push  00h          ; Save R0
        push  acc          ; Save Acc
        mov   r0,#08       ; 8 Bits In A Byte
        xrl   b,a          ; CRC8 ^= Data
lp1:    clr   c            ; 0 Into High Bit
        mov   a,b          ; CRC8 >>= 1
        rrc   a
        mov   b,a
        jnc   lp2          ; Skip If Bit 0 Wasn't Set
        xrl   b,#8Ch       ; CRC8 ^= $8C
lp2:    djnz  r0,lp1       ; Repeat R0 More Times
        pop   acc          ; Recover Acc
        pop   00h          ; Recover R0
        ret
}
end;

///////////////////////////////////////////////////////////
// 8位CRC:生成CRC8表(256項(xiàng)),用于快速查表計(jì)算
// 在程序初始化時(shí)就先調(diào)用,預(yù)先生成CRC8Tab[256]查表數(shù)據(jù)
///////////////////////////////////////////////////////////
procedure InitCRC8Table(genpoly: DWord);
var i: Integer;
begin
  for i:=0 to 255 do
    CRC8Tab[i] := CalCRC8(i,0,genpoly);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久色视频免费观看| 国产精品一线二线三线精华| 日韩一区精品字幕| 精品国产91乱码一区二区三区| 午夜伦理一区二区| 精品在线观看免费| 在线播放中文一区| 中文字幕va一区二区三区| 亚洲欧美国产三级| 粉嫩av一区二区三区粉嫩| 欧美伊人久久久久久久久影院| 日韩一区二区三区视频| 亚洲大片一区二区三区| 久久精品国产**网站演员| 欧美日韩免费电影| 久久理论电影网| 久久国产生活片100| 在线免费亚洲电影| 精品成人一区二区三区| 首页亚洲欧美制服丝腿| 豆国产96在线|亚洲| 国产午夜精品久久久久久久| 亚洲色图欧美偷拍| 国内成人免费视频| www.亚洲色图.com| 欧美电影免费观看高清完整版在线 | 色哟哟一区二区在线观看| 日韩亚洲欧美一区二区三区| 亚洲国产aⅴ成人精品无吗| 韩国欧美一区二区| 日本韩国一区二区| 中文字幕在线播放不卡一区| 亚洲国产精品欧美一二99| 国产原创一区二区三区| 精品乱人伦一区二区三区| 国产乱淫av一区二区三区| 亚洲一区视频在线| 91丨九色丨蝌蚪富婆spa| 欧美精彩视频一区二区三区| 亚洲成人动漫一区| 欧美日韩在线播放一区| 亚洲裸体在线观看| av一二三不卡影片| 国产欧美日韩另类一区| 极品尤物av久久免费看| 久久综合色婷婷| 在线综合+亚洲+欧美中文字幕| 欧美激情中文字幕一区二区| 国产九色sp调教91| 2020国产精品自拍| 国产在线不卡一区| 日韩你懂的在线观看| 日韩av电影免费观看高清完整版| 成人午夜电影网站| 国产成人精品免费一区二区| 国产欧美一区二区精品秋霞影院 | 粉嫩av一区二区三区粉嫩| 中文字幕+乱码+中文字幕一区| 亚洲成人综合在线| 3d成人h动漫网站入口| 日韩国产在线观看一区| 欧美精品在线视频| 国产成人免费xxxxxxxx| 亚洲一区二区视频在线观看| 91激情在线视频| 久久精品国产一区二区三| 欧美成人a视频| 欧美日韩一级大片网址| 青娱乐精品视频| 欧美高清视频不卡网| 视频一区二区不卡| 欧美精品日韩一区| 国内成人精品2018免费看| 国产精品污www在线观看| 国产毛片一区二区| 中文字幕一区二区三区四区不卡 | 麻豆精品国产传媒mv男同| 在线成人免费观看| 美国精品在线观看| 久久久久97国产精华液好用吗| 久久久精品天堂| 国产成人av电影| 国产欧美日韩三级| 91在线精品一区二区三区| 欧美日韩国产小视频在线观看| 亚洲综合色视频| 91久久国产综合久久| 日韩精品免费视频人成| 日韩你懂的在线播放| 粉嫩欧美一区二区三区高清影视| 亚洲欧美日本在线| 欧美日韩一区不卡| 韩国在线一区二区| 国产精品色噜噜| 成人蜜臀av电影| 亚洲国产一区在线观看| 欧美视频日韩视频在线观看| 免费高清在线视频一区·| 26uuu国产在线精品一区二区| 欧美三级日韩三级国产三级| 欧美日韩亚洲综合在线| 欧美一区二区不卡视频| 555www色欧美视频| 欧美午夜精品一区二区三区| 日韩免费福利电影在线观看| 国产精品久久久久影院亚瑟| 一级中文字幕一区二区| 精品va天堂亚洲国产| 久久精品国产一区二区三 | 欧美日韩成人综合天天影院 | 国产99久久久国产精品潘金| 在线观看91av| 成人国产精品免费观看| 国产精品青草综合久久久久99| 成人午夜视频在线观看| 日韩一级成人av| 捆绑调教美女网站视频一区| 欧美视频第二页| 欧美日韩国产综合视频在线观看| 亚洲欧洲精品一区二区精品久久久| 99久久免费精品高清特色大片| 久久免费视频一区| 久久伊人中文字幕| 欧美亚日韩国产aⅴ精品中极品| 久久久久久久电影| 国产精品18久久久久久久网站| 精品不卡在线视频| 欧美日韩第一区日日骚| 不卡在线视频中文字幕| 亚洲欧美激情插| 亚洲精品一区二区三区在线观看| av动漫一区二区| 不卡的电影网站| 91浏览器在线视频| 欧美性感一区二区三区| 成人免费毛片a| 高清不卡在线观看av| 亚洲综合激情另类小说区| 亚洲第一二三四区| 国产亚洲欧美激情| 欧美一区在线视频| 久久久三级国产网站| 老司机免费视频一区二区 | 亚洲欧美日韩系列| 欧美岛国在线观看| 国产日韩综合av| 亚洲欧洲日韩在线| 三级久久三级久久| 免费日韩伦理电影| 91免费看`日韩一区二区| 在线观看欧美精品| 亚洲一区二区视频在线观看| 久久精品国产久精国产| 欧美日韩国产免费一区二区| 欧美色男人天堂| 精品国产欧美一区二区| 日韩一区二区三区在线视频| 不卡av在线免费观看| 欧美丰满少妇xxxxx高潮对白| 日韩网站在线看片你懂的| 欧美日韩一区不卡| 在线观看免费亚洲| 午夜在线电影亚洲一区| 日本在线不卡一区| 国产一区二区三区精品视频| 亚洲激情自拍视频| 日本在线播放一区二区三区| 亚洲精品欧美综合四区| 久久综合色播五月| 亚洲va在线va天堂| 91视视频在线观看入口直接观看www | 午夜精品久久久| 国产欧美一区二区精品久导航 | 欧美一区二区三区四区在线观看| 成人午夜av影视| 91精品婷婷国产综合久久竹菊| 久久亚洲一区二区三区明星换脸 | 国产成人av一区二区三区在线观看| 国产亚洲精品aa| 亚洲欧洲99久久| 国产一区二区三区香蕉| 椎名由奈av一区二区三区| 91久久精品国产91性色tv| 男人的j进女人的j一区| 久久精品在线免费观看| 欧美一三区三区四区免费在线看| av综合在线播放| 国产成人精品免费一区二区| 美日韩黄色大片| 美腿丝袜亚洲色图| 亚洲一区二区三区在线播放| 精品国产一区二区三区久久影院 | 美腿丝袜亚洲综合| 日韩电影网1区2区| 一区二区久久久久| 亚洲免费在线观看| 亚洲三级在线免费| 亚洲老司机在线| 亚洲特级片在线| 亚洲人成在线观看一区二区|