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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.pas

?? CRC運算
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
end;

///////////////////////////////////////////////////////////
// 8位CRC:通過查表快速計算,速度快,占用空間多
// 注:數據流是低位先行,與16位CRC相反
// 要預先生成CRC8Tab[256]查表數據
///////////////////////////////////////////////////////////
function QuickCRC8(data, crc: Byte): Word;
begin
  crc := CRC8Tab[crc xor data];
  Result := crc;
{
; MCS51的CRC-8快速查表計算函數
; 要預先生成CRC8查表數據,起始地址CRC8Tab,按順序存放(256字節)
; 調用:B=原CRC8值(8位,初始值為00h),A=待計算數據(8位)
; 結果:B=計算后的CRC8值(8位)
QuickCRC8:
        push  dph             ; Save DPH
        push  dpl             ; Save DPL
        push  acc             ; Save Acc
        mov   dptr,#CRC8Tab   ; Point To Table
        xrl   a,b             ; XOR In CRC
        movc  a,@a+dptr       ; Get New CRC Byte
        mov   b,a             ; Store Back
        pop   acc             ; Recover Acc
        pop   dpl             ; Recover DPL
        pop   dph             ; Recover DPH
        ret
}
end;









///////////////////////////////////////////////////////////
// 32位CRC:按位計算,速度最慢,占用空間最少
// 注:數據流是低位先行,與16位CRC相反
///////////////////////////////////////////////////////////
function CalCRC32(data, crc, genpoly: DWord): DWord;
var i: Integer;
begin
  if HighFirst then // 數據流高位先行
  begin
    crc := crc xor (data shl 24);
    for i:=0 to 7 do
      if (crc and $80000000) <> 0 then // 只測試最高位
        crc := (crc shl 1) xor genpoly // 最高位為1,移位和異或處理
      else crc := crc shl 1; // 否則只移位(乘2)
    Result := crc;
  end
  else // 數據流低位先行
  begin
    crc := crc xor data;
    for i:=0 to 7 do
      if (crc and $01) <> 0 then // 只測試最低位
        crc := (crc shr 1) xor genpoly // 最低位為1,移位和異或處理
      else crc := crc shr 1; // 否則只移位(除2)
    Result := crc;
  end;
end;

///////////////////////////////////////////////////////////
// 32位CRC:生成CRC32表(256項),用于快速查表計算
// 在程序初始化時就先調用,預先生成CRC32Tab[256]查表數據
///////////////////////////////////////////////////////////
procedure InitCRC32Table(genpoly: DWord);
var i: Integer;
begin
  for i:=0 to 255 do
    CRC32Tab[i] := CalCRC32(i,0,genpoly);
end;

///////////////////////////////////////////////////////////
// 32位CRC:通過查表快速計算,速度快,占用空間多
// 注:數據流是低位先行,與16位CRC相反
// 要預先生成CRC32Tab[256]查表數據
///////////////////////////////////////////////////////////
function QuickCRC32(data, crc: DWord): DWord;
begin
  if HighFirst then // 數據流高位先行
  begin
    crc := CRC32Tab[(crc shr 24) xor data] xor (crc shl 8);
    Result := crc;
  end
  else // 數據流低位先行
  begin
    crc := CRC32Tab[Byte(crc xor data)] xor (crc shr 8);
    Result := crc;
  end;

end;










///////////////////////////////////////////////////////////
// 測試比較CRC16/CRC8/CRC32的不同算法
// 若CRC初始值為0,則結果與快速查表表格數據相同
///////////////////////////////////////////////////////////
procedure TForm1.TestCRC16BtnClick(Sender: TObject);
var data, crc, crcstart: Word;
begin
  HighFirst := HighFirstRB.Checked;
  GenPoly16 := StrToIntDef(GenPoly16Edit.Text,0);
  InitCRC16Table(GenPoly16); // 先生成CRC16表(256項),用于快速查表計算
  crcstart := StrToIntDef(CRCStartEdit.Text,0); // CRC初始值

  Memo1.Clear;
  Memo1.Lines.Add('16bit CRC');
  for data:=0 to 255 do
  begin
    if BitCalcRB.Checked then
      crc := CalCRC16(data,crcstart,GenPoly16) // 按位計算CRC
    else
      crc := QuickCRC16(data,crcstart); // 按字節查表計算CRC
    Memo1.Text := Memo1.Text + IntToHex(crc, 4) + ' ';
  end;
end;

procedure TForm1.TestCRC8BtnClick(Sender: TObject);
var data, crc, crcstart: Byte;
begin
  HighFirst := HighFirstRB.Checked;
  GenPoly8 := StrToIntDef(GenPoly8Edit.Text,0);
  InitCRC8Table(GenPoly8); // 先生成CRC8表(256項),用于快速查表計算
  crcstart := StrToIntDef(CRCStartEdit.Text,0); // CRC初始值

  Memo1.Clear;
  Memo1.Lines.Add('8bit CRC');
  for data:=0 to 255 do
  begin
    if BitCalcRB.Checked then
      crc := CalCRC8(data,crcstart,GenPoly8) // 按位計算CRC
    else
      crc := QuickCRC8(data,crcstart); // 按字節查表計算CRC
    Memo1.Text := Memo1.Text + IntToHex(crc, 2) + '   ';
  end;
end;

procedure TForm1.TestCRC32BtnClick(Sender: TObject);
var data, crc, crcstart: DWord;
begin
  HighFirst := HighFirstRB.Checked;
  GenPoly32 := StrToIntDef(GenPoly32Edit.Text,0);
  InitCRC32Table(GenPoly32); // 先生成CRC32表(256項),用于快速查表計算
  crcstart := StrToIntDef(CRCStartEdit.Text,0); // CRC初始值

  Memo1.Clear;
  Memo1.Lines.Add('32bit CRC');
  for data:=0 to 255 do
  begin
    if BitCalcRB.Checked then
      crc := CalCRC32(data,crcstart,GenPoly32) // 按位計算CRC
    else
      crc := QuickCRC32(data,crcstart); // 按字節查表計算CRC
    Memo1.Text := Memo1.Text + IntToHex(crc, 8) + '  ';
  end;
end;

///////////////////////////////////////////////////////////
// 從文本字串中分解出16進制的數據,返回這些8位數據組成的字串
// 文本字串分解規則:
// 1.數據是用16進制表示的8位數據(如FC,3D等)
// 2.每個數據只取最后兩個16進制字符,如1F3D只取3D,前面多余部分拋棄
// 3.每個數據之間用空格或回車換行等格式符號隔開
///////////////////////////////////////////////////////////
function GetDataFromText(str: String): String;
var i, p1, p2: Integer;
begin
  Result := '';
  while str <> '' do
  begin
    i := 0;
    p1 := Pos(' ',str);
    p2 := Pos(#13#10,str);

    if p1=1 then // 空格在最前面
    begin Delete(str,1,1); continue; end;
    if p2=1 then // #13#10在最前面
    begin Delete(str,1,2); continue; end;

    if (p1=0) and (p2=0) and (str<>'') then // 都沒有找到,結束
    begin
      i := StrToIntDef('$'+str,0);
      Delete(str,1,Length(str));
    end;
    if ((p1>0) and (p2=0)) or // 找到空格
       ((p1>0) and (p2>0) and (p1<p2)) then // 或都找到,但空格在前
    begin
      i := StrToIntDef('$'+Copy(str,1,p1-1),0);
      Delete(str,1,p1);
    end;
    if ((p1=0) and (p2>0)) or // 找到#13#10
       ((p1>0) and (p2>0) and (p1>p2)) then // 或都找到,但空格在后
    begin
      i := StrToIntDef('$'+Copy(str,1,p2-1),0);
      Delete(str,1,p2+1);
    end;
    Result := Result + Chr(i); // 8位數據轉為字符
  end; // while
end;

///////////////////////////////////////////////////////////
// 計算一組數據的CRC16/CRC8/CRC32結果
// 數據來源于文本框中的數據字串
///////////////////////////////////////////////////////////
procedure TForm1.CalCRC16BtnClick(Sender: TObject);
var
  i: Integer;
  databuf: String;
  data, crc: Word;
begin
  HighFirst := HighFirstRB.Checked;
  GenPoly16 := StrToIntDef(GenPoly16Edit.Text,0);
  InitCRC16Table(GenPoly16); // 先生成CRC16表(256項),用于快速查表計算
  crc := StrToIntDef(CRCStartEdit.Text,0); // CRC初始值

  databuf := GetDataFromText(Memo1.Text); // 從文本中讀取數據
  for i:=1 to Length(databuf) do
  begin
    data := Ord(databuf[i]); // 字符轉為8位數據
    if BitCalcRB.Checked then
      crc := CalCRC16(data,crc,GenPoly16) // 按位計算CRC
    else
      crc := QuickCRC16(data,crc); // 快速查表計算CRC
  end;
  CRC16ResultEdit.Text := '$' + IntToHex(crc,4); // 顯示結果
end;

procedure TForm1.CalCRC8BtnClick(Sender: TObject);
var
  i: Integer;
  databuf: String;
  data, crc: Byte;
begin
  HighFirst := HighFirstRB.Checked;
  GenPoly8 := StrToIntDef(GenPoly8Edit.Text,0);
  InitCRC8Table(GenPoly8); // 先生成CRC8表(256項),用于快速查表計算
  crc := StrToIntDef(CRCStartEdit.Text,0); // CRC初始值

  databuf := GetDataFromText(Memo1.Text); // 從文本中讀取數據
  for i:=1 to Length(databuf) do
  begin
    data := Ord(databuf[i]); // 字符轉為8位數據
    if BitCalcRB.Checked then
      crc := CalCRC8(data,crc,GenPoly8) // 按位計算CRC
    else
      crc := QuickCRC8(data,crc); // 快速查表計算CRC
  end;
  CRC8ResultEdit.Text := '$' + IntToHex(crc,2); // 顯示結果
end;

procedure TForm1.CalCRC32BtnClick(Sender: TObject);
var
  i: Integer;
  databuf: String;
  data, crc: DWord;
begin
  HighFirst := HighFirstRB.Checked;
  GenPoly32 := StrToIntDef(GenPoly32Edit.Text,0);
  InitCRC32Table(GenPoly32); // 先生成CRC32表(256項),用于快速查表計算
  crc := StrToIntDef(CRCStartEdit.Text,0); // CRC初始值

  databuf := GetDataFromText(Memo1.Text); // 從文本中讀取數據
  for i:=1 to Length(databuf) do
  begin
    data := Ord(databuf[i]); // 字符轉為8位數據
    if BitCalcRB.Checked then
      crc := CalCRC32(data,crc,GenPoly32) // 按位計算CRC
    else
      crc := QuickCRC32(data,crc); // 快速查表計算CRC
  end;
  if FlipResultCB.Checked then crc := not crc;
  CRC32ResultEdit.Text := '$' + IntToHex(crc,8); // 顯示結果
  // 由于是低位先行,計算得到的CRC-32也要按低字節在先的順序排列
  // 比如數據12 34,計算CRC-32=59408466,結果要按66 84 40 59順序
  // 最后驗證數據正確性時,12 34 66 84 40 59的CRC-32=0
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91老师片黄在线观看| 久久免费看少妇高潮| 精品日韩av一区二区| 国产日韩亚洲欧美综合| 五月天激情综合网| 成人av集中营| 亚洲精品一区二区三区在线观看| 自拍偷拍国产亚洲| 久久国产剧场电影| 欧美日韩在线观看一区二区| 中文字幕乱码亚洲精品一区| 三级不卡在线观看| 在线欧美日韩精品| 中文字幕日韩av资源站| 国产呦精品一区二区三区网站| 欧美精品在线观看一区二区| 亚洲精品中文字幕乱码三区| 波多野结衣欧美| 久久精品这里都是精品| 麻豆视频一区二区| 91精品午夜视频| 亚洲狠狠爱一区二区三区| 成人网页在线观看| 国产欧美中文在线| 国产乱理伦片在线观看夜一区| 91麻豆精品国产自产在线| 亚洲午夜精品在线| 欧洲色大大久久| 亚洲色图欧洲色图| 97精品视频在线观看自产线路二| 亚洲国产电影在线观看| 国产在线精品不卡| 久久久久久久久免费| 国产精品自拍av| 久久久久久夜精品精品免费| 国产一区二区三区视频在线播放| 337p日本欧洲亚洲大胆精品| 韩国视频一区二区| 久久综合丝袜日本网| 国产精品一区二区x88av| 精品国产乱码久久久久久闺蜜| 久久国产精品99精品国产| 国产精品久久久久四虎| 国产传媒日韩欧美成人| 国产欧美久久久精品影院| 大陆成人av片| 亚洲男人都懂的| 91黄色小视频| 偷拍与自拍一区| 精品日韩在线一区| 国产91丝袜在线播放0| 国产精品免费免费| 色吧成人激情小说| 日韩高清在线一区| 精品久久久久久最新网址| 国产精品夜夜嗨| 亚洲欧洲国产日韩| 欧美肥妇bbw| 国产精品白丝av| 亚洲女子a中天字幕| 在线成人小视频| 精彩视频一区二区三区| 中文字幕一区日韩精品欧美| 91福利视频网站| 六月婷婷色综合| 亚洲色图.com| 日韩欧美一级在线播放| 福利电影一区二区| 亚洲午夜激情网站| 久久蜜桃香蕉精品一区二区三区| 91免费观看在线| 国产主播一区二区| 亚洲一区二区综合| 久久精品日韩一区二区三区| 欧美伊人久久久久久久久影院| 久久国产福利国产秒拍| 亚洲精品视频一区| 精品第一国产综合精品aⅴ| 成人免费看黄yyy456| 日韩国产在线一| 最新久久zyz资源站| 91精品国产综合久久精品性色| 国产99精品国产| 视频一区二区中文字幕| 国产精品美女久久久久高潮| 欧美日本视频在线| 91网站最新地址| 国产在线视频不卡二| 亚洲国产sm捆绑调教视频| 中文字幕乱码亚洲精品一区| 日韩欧美国产系列| 欧美少妇bbb| 99久久精品国产一区| 久久av资源网| 偷窥少妇高潮呻吟av久久免费| 国产精品日产欧美久久久久| 日韩精品中文字幕在线一区| 欧美疯狂做受xxxx富婆| 亚洲精品国产品国语在线app| 成人av电影免费在线播放| 日韩激情中文字幕| 亚洲黄色性网站| 久久久久久一二三区| 日韩精品一区二区三区三区免费| 日本黄色一区二区| 波多野结衣视频一区| 成人午夜免费视频| 亚洲人快播电影网| 一区二区三区影院| 蜜臀av国产精品久久久久 | 亚洲欧洲国产专区| 一区二区三区色| 秋霞电影网一区二区| 国产精品18久久久久久久久| 99国产精品久久久久久久久久| 欧美亚洲国产一区二区三区va | 亚洲女同一区二区| 午夜久久久久久久久久一区二区| 久久电影网站中文字幕| 91在线国产福利| 69久久夜色精品国产69蝌蚪网| 久久综合精品国产一区二区三区| 国产精品欧美综合在线| 亚洲成a天堂v人片| 国产乱码一区二区三区| 在线免费不卡电影| 精品国产亚洲在线| 亚洲男同性恋视频| 国产乱色国产精品免费视频| 色噜噜狠狠一区二区三区果冻| 精品国产伦一区二区三区观看体验 | 欧洲中文字幕精品| 精品国产凹凸成av人网站| 亚洲激情中文1区| 国产在线视频不卡二| 欧美女孩性生活视频| 国产精品美女一区二区在线观看| 全部av―极品视觉盛宴亚洲| 成人激情黄色小说| 亚洲精品一区二区三区精华液| 亚洲综合色噜噜狠狠| 国产成人av电影在线| 91精品国产美女浴室洗澡无遮挡| 中文字幕视频一区| 国产一本一道久久香蕉| 91精品国产色综合久久不卡蜜臀| 中文字幕中文在线不卡住| 国产毛片一区二区| 欧美α欧美αv大片| 午夜精品久久久久久久久久久| 成人一级黄色片| 337p粉嫩大胆色噜噜噜噜亚洲| 日本午夜一区二区| 欧美中文字幕一区| 亚洲人吸女人奶水| 91玉足脚交白嫩脚丫在线播放| 久久久午夜精品理论片中文字幕| 麻豆国产精品777777在线| 欧美日本一道本| 一个色在线综合| 91成人在线观看喷潮| 亚洲男人电影天堂| 91香蕉视频黄| 亚洲欧美日韩综合aⅴ视频| 成人avav在线| 国产精品超碰97尤物18| 9久草视频在线视频精品| 中文子幕无线码一区tr| 国产凹凸在线观看一区二区| 国产亚洲精品7777| 粉嫩av亚洲一区二区图片| 国产清纯白嫩初高生在线观看91| 国产精品一区专区| 国产欧美日韩另类一区| 白白色 亚洲乱淫| 一区二区三区精密机械公司| 在线视频一区二区免费| 性欧美大战久久久久久久久| 欧美精选午夜久久久乱码6080| 日韩在线观看一区二区| 7799精品视频| 黄色成人免费在线| 国产三级精品三级在线专区| 99热精品一区二区| 亚洲mv在线观看| 精品少妇一区二区三区免费观看| 国产乱码精品一区二区三| 国产精品免费观看视频| 在线观看www91| 麻豆久久一区二区| 久久精品夜色噜噜亚洲aⅴ| 成人av网在线| 国产精品护士白丝一区av| 91福利资源站| 亚洲成人免费av| 精品日韩欧美在线| 国产一区二区三区久久久| 欧美极品另类videosde| 日本高清视频一区二区| 亚洲一区二区美女|