xicrc.cpp

来自「这是C++数值算法(第二版)的源代码,其中包含了目前一些比较常用的数值计算的算法」· C++ 代码 · 共 51 行

CPP
51
字号
#include <string>
#include <iostream>
#include <iomanip>
#include "nr.h"
using namespace std;

// Driver for routine icrc

inline unsigned char lobyte(const unsigned short x)
{return (unsigned char)(x & 0xff);}

inline unsigned char hibyte(const unsigned short x)
{return (unsigned char) ((x >> 8) & 0xff);}

int main(void)
{
        string lin;
        unsigned short i1,i2;
        unsigned long n;

        for (;;) {
          cout << "Enter string: " << endl;
          getline(cin,lin);
          n=lin.length();
          if (n == 0) break;
          cout << lin << endl;
          i1=NR::icrc(0,lin,0,1);
          lin += hibyte(i1);
          lin += lobyte(i1);
          i2=NR::icrc(i1,lin,0,1);
          cout << "    XMODEM: String CRC, Packet CRC=    0x" << hex << i1;
          cout << "   0x" << i2 << endl;
          lin.erase(n,2);
          i1=NR::icrc(i2,lin,0xff,-1);
          lin += ~lobyte(i1);
          lin += ~hibyte(i1);
          i2=NR::icrc(i1,lin,0xff,-1);
          cout << "      X.25: String CRC, Packet CRC=    0x" << hex << i1;
          cout << "   0x" << hex << i2 << endl;
          lin.erase(n,2);
          i1=NR::icrc(i2,lin,0,-1);
          lin += lobyte(i1);
          lin += hibyte(i1);
          i2=NR::icrc(i1,lin,0,-1);
          cout << " CRC-CCITT: String CRC, Packet CRC=    0x" << hex << i1;
          cout << "   0x" << hex << i2 << endl;
        }
        cout << "Normal completion" << endl;
        return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?