精华内容
下载资源
问答
  • 常用的查表法有
    千次阅读
    2021-02-05 13:52:45

    /*****************************************************

    描    述:  CRC8校验子程序 x^8+x^5+x^4+x^0

    入口参数:  指向数组指针,校验字节个数

    出口参数:  8位CRC校验码

    ******************************************************/

    const char CRC8Table[]={

    0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,

    157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,

    35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,

    190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,

    70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,

    219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,

    101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,

    248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,

    140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,

    17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,

    175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,

    50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,

    202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,

    87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,

    233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,

    116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53

    };

    unsigned char CRC8_Table(unsigned char *p, char counter)

    {

    unsigned char crc8 = 0;

    for( ; counter > 0; counter--){

    crc8 = CRC8Table[crc8^*p];

    p++;

    }

    return(crc8);

    }

    /*****************************************************

    描    述:  text

    ******************************************************/

    void main()

    {

    unsigned  char  a[] = {0x02, 0x03};

    printf("%d", CRC8_Table(&a, 2));

    getch();

    }

    更多相关内容
  • 在单片机平台上以查表法来实现三角函数sin
  • 查表法实现三角函数,常用三角函数表值查表,C,C++源码
  • 查表法计算CRC

    千次阅读 2020-12-24 02:03:29
    (查表法)CRC检验码的计算过程(1)将上次计算出的CRC校验码右移一个字节;(2)将移出的这个字节与新的要校验的字节进行XOR 运算;(3)用运算出的值在预先生成码表中进行索引,获取对应的值(称为余式);(4)用获取的值与第...

    (查表法)CRC检验码的计算过程

    (1)将上次计算出的CRC校验码右移一个字节;

    (2)将移出的这个字节与新的要校验的字节进行XOR 运算;

    (3)用运算出的值在预先生成码表中进行索引,获取对应的值(称为余式);

    (4)用获取的值与第(1)步右移后的值进行XOR 运算;

    (5)如果要校验的数据已经处理完,则第(4)步的结果就是最终的CRC校验码。如果还有数据 要进行处理,则再转到第(1)步运行。

    public static byte GetCRC8(byte[] data, int startIndex, int dataLength)

    {

    if (data == null)

    throw new ArgumentNullException("数组不能为空");

    if (startIndex > data.Length)

    throw new ArgumentException("起始索引超出数组长度");

    if (startIndex < 0)

    throw new ArgumentOutOfRangeException("起始索引不应该小于0");

    byte result = 0;

    for (int i = 0; i < dataLength; i++)

    {

    result = CRC8_TABLE[(byte)result ^ data[startIndex + i]];

    }

    return result;

    }

    public static byte GetCRC16(byte[] data, int startIndex, int dataLength)

    {

    if (data == null)

    throw new ArgumentNullException("数组不能为空");

    if (startIndex > data.Length)

    throw new ArgumentException("起始索引超出数组长度");

    if (startIndex < 0)

    throw new ArgumentOutOfRangeException("起始索引不应该小于0");

    UInt16 result = 0;

    for (int i = 0; i < dataLength; i++)

    {

    result = (UInt16)(((result >> 8)) ^ CRC16_TABLE[(byte)(data[startIndex + i] ^ result)]);

    }

    return result;

    }

    #region CRC表

    ///

    /// 8位CRC表

    ///

    static readonly byte[] CRC8_TABLE = new byte[]

    {

    0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,

    0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,

    0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,

    0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,

    0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,

    0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,

    0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,

    0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,

    0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,

    0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,

    0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,

    0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,

    0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,

    0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,

    0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,

    0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,

    0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,

    0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,

    0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,

    0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,

    0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,

    0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,

    0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,

    0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,

    0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,

    0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,

    0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,

    0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,

    0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,

    0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,

    0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,

    0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3

    };

    static readonly ushort[] CRC16_TABLE = new ushort[]

    {

    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,

    0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,

    0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,

    0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,

    0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,

    0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,

    0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,

    0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,

    0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,

    0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,

    0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,

    0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,

    0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,

    0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,

    0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,

    0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,

    0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,

    0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,

    0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,

    0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,

    0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,

    0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,

    0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,

    0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,

    0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,

    0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,

    0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,

    0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,

    0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,

    0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,

    0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,

    0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0

    };

    #endregion

    展开全文
  • 请教查表法计算CRC的原理

    千次阅读 2021-01-14 04:42:45
    自己写过的,希望对你帮助CyclicRedundancyCheck(CRC)原理及实现///////////////////////////////////////////////////////////////////////////1:需求在数据传送过程中,为了能够进行错误检测,往往在数据后追加...

    自己写过的, 希望对你有帮助

    Cyclic Redundancy Check(CRC) 原理及实现

    ///

    1: 需求

    在数据传送过程中,为了能够进行错误检测, 往往在数据后追加一些检测码,

    当接受方收到了数据后, 用同样的算法进行计算检测码, 如果一致说明数据

    正确, 否则通知发送方重新发送。 现假定数据为6 23 44:

    历史上出现过多个算法, 如:

    累加求模:

    (6+23+4)%256 == 33, 则发送数据6 23 44 33

    XOR:

    (6^ 23 ^4) = 21 则发送数据 6 23 4 21

    然而, 这却不是好的算法, 好的算法要求数据的数据能散列的分布在检测码

    中, 对于累加求模的(6 24 3 )以及xor的(6 22 5)都能输出同样的检测码

    于是, CRC诞生了。

    ///

    ///

    2:CRC的背景理论

    crc将数据追加结尾的wbit的0当作一个很大阶的多项式, 用它去除于另一个双方约定的多项式,

    得到的余数, 则为检测码,其中w为约定多项式的最大阶数, 最后传输原始数据追加检测码,

    其中任何一位发生变化, 都导致最后得到的结果差别很大,

    CRC因为容易简单实现以及容错性强, 而被广泛使用。

    追加wbit的好处是, 整个传输的数据刚刚能够被约定的多项式

    p1|00..00| / p2 = p3 .....p4

    则(p1|00.00|+p4) / p2 = p3....0

    p1|00.00|+p4 = p1|p4|  (后面的多项式运算能够证明)

    这里为了方便说明, 下列进行运行的数据都没有追加结尾的0

    这里有2个问题, 如何把数据流转换成多项式, 以及如何做多项式的除法。

    数据流的转换:

    假如有2个byte(6,23)我们把他转成16进制为0617, 二进制表示为

    0000 0110 0001 0111 对应多项式 x^10 + x^9 + x^4 + x^2 + x^1 + 1

    多项式除法:

    先说多项式加法, 多项式x^4 + x^2 + x + 1 和多项式x^4+x^3+1

    为 2*x^4 + x^3 + x^2 + x^1 + 2*(x^0)

    由于x是个未知数, 不知道怎么进行系数和阶的转换, 于是规定:

    "如果系数mod2==0, 那么则丢弃, 否则保留, 多项式不考虑系数"

    所以上述2个多项式相加的结果为 x^3+x^2+x^1

    同样根据规定可以知道, 多项式p1+p2 == p1-p2,

    即: 多项式相减等同于多项式相加.

    用2进制表示有 1011 + 1101 = 0110, 1011 - 1101 = 0110

    这即等同与2进制的xor操作。

    再来看看多项式乘法, (x^4+x^2+x^1+1) * (x^2 + x^1 + 1)

    = (x^6+x^4+x^3+x^2) + (x^5+x^3+x^2+x^1) + (x^4+x^2+x^1+1)

    = x^6 + x^5 + x^2 + 1

    我们再来看看多项式除法

    x^2 + x1 + 1

    --------------------

    x^4+x^2+x^1+1 ) x^6 + x^5 + x^2 + 1

    (x^6+x^4+x^3+x^2) + (x^5+x^3+x^2+x^1) + (x^4+x^2+x^1+1)

    -(x^6 + x^4 + x^3 + x^2)

    (x^5+x^3+x^2+x^1) + (x^4+x^2+x^1+1)

    -(x^5+x^3+x^2+x^1)

    (x^4+x^2+x^1+1)

    -(x^4+x^2+x^1+1)

    0

    根据乘/除法和加/减法的运算规则不难看出,

    a: p1 % p2 = p3....p4 ===> p1 = p2*p3 + p4

    b: 设p2是一个w阶的多项式, 那么余数是一个w-1阶的多项式。 w叫做多项式的位宽。

    比如 x^4+x^2+x^1+1的位宽为4, 余数为一个3阶的多项式。 占4个2进制位.

    crc中, 把w位宽的多项式叫做crcw, 如约定的除式为X^4+x^2+x^1+1 (10111)

    那么就叫crc4, 对于的余数则在(0000 ... 1111)的范围内.

    ///

    ///

    3: 实现

    对于2中定义的多项式. 转成2进制的形式, 有

    111

    -------------------

    10111 (b)   )1100101                   (a)

    10111..

    11100.

    10111.

    10111

    10111

    0

    不难看出, 设4bit的crc初始为0, 每次从crc中移走最高位, 从a中移走一位进最

    低位,  如果crc中移走的为1, 则将结果xor下10111的低4位(0111), 否则不处理

    c语言描述有

    while (msg)

    {

    crc = (crc<<1 | get_msg_bit) ^  ( (crc&1000) ? (10111&1111) : 0000)

    }

    for(int i=0; i

    {

    crc = (crc<<1 | 0) ^  ( (crc&1000) ? (10111&1111) : 0000)

    }

    上述即是crc的标准算法. 下面我们开始优化.

    ----------------------------------------

    优化a: 查表法

    设a,b,c都是4bit的数, 有

    (a^b) ^ c == a ^ (b^c)

    证明: 因为xor都是位对其操作, 所以我们只要证明bit具有属性(b1^b2)^b3==b1^(b2^b3)

    因 (b1^b2)^b3 == ((b1+b2)+b3)mod2,   b1^(b2^b3) == (b1+(b2+b3))mod2

    bit operator + 具有交换率,  所以 (a^b)^c == a^(b^c)

    因为计算机的操作单元一般都是byte, 如果每次都进行一次bit操作, 那么效率上

    会大打折扣.

    现在我们假设w是32, 即crc32. 有个4byte的寄存器R [b1 b2 b3 b4] 用来存储CRC32的值

    根据前面的交换率, 我们可以先计算出b1对于后4个字节的影响值来, 记做table[b1]

    然后把b2 b3 b4 a (a为读出的一个byte的msg) 跟 table[b1]来xor下. 有

    while(msg)

    {

    crc =     (crc<<8 | get_msg_byte) ^  table[crc >> 24];

    }

    for(int i=0; i

    {

    crc =     (crc<<8 | 0) ^ table[crc>>24];

    }

    前提是要提前计算出一个静态的256项的表来, 当然你也可以计算出65536项的表来, 一次

    update 2个byte, 但这样意义不大.

    ----------------------------------------

    优化b:  我们现在开始把后面烦琐的 for(int i=0; i

    假如数据 aa bb cc dd .. xx 00 00 00 00 有crc32为 (a1 a2 a3 a4)         .....(1)

    数据 aa bb cc dd .. xx yy 00 00 00 00 有crc32为(b1 b2 b3 b4)       .....(2)

    数据 aa bb cc dd .. xx yy 00 00 00 有crc32(c1 c2 c3 c4)            .....(3)

    不难看出, c1=a1^yy c2=a2 c3=a3 c4=a4,  这是因为yy处于最后w位移进R的, 他不会被R

    移出左边, 所以他不会影响到后面3个0. 他只会被前面的值xor影响到, 由于xor具有

    交换率, 所以c1=a1^yy, 现在..

    aa bb cc dd .. xx yy 00 00 00 有crc32(a1^yy a2 a3 a4)         .....(3)

    aa bb cc dd .. xx yy 00 00 00 00 有crc32(b1 b2 b3 b4)         .....(2)

    根据a的查表, 我们可以知道

    (b1 b2 b3 b4)  ==     table[a1^yy] ^ (a2 a3 a4 00)

    回到刚开始, crc32 init == (x1 x2 x3 x4),  那么 x1 x2 x3 x4 00 00 00 00 = (y1 y2 y3 y4)

    现在init=0, 所以x1x2x3x4y1y2y3y4 = 0

    有 aa 00 00 00 00 为 table[aa], 也就是 table[aa^0] ^ (0)

    综合有.

    crc = 0

    while(msg)

    {

    crc  = table[crc>>24 ^ get_msg_byte] ^ (crc<<8)

    }

    -------------------------------------------

    优化c : Reflected

    由于我们用字节存储的时候, 都是LSBF(least significant bit first)

    而我们b里面是用的MSBF,  也就是说, 在算法b中, 我们需要:

    把每次get_msg_byte都需要Reflected

    initial value需要reflected

    最后的结果需要reflected下

    byte reflected(byte b)

    {

    byte c;

    for(int i=0; i<8; ++i)

    {

    c <<= 1;

    if (b&1) c|=1;

    b >>= 1;

    }

    return c;

    }

    于是有

    while(msg)

    {

    crc = table[crc ^ get_msg_byte] ^ (crc>>8)

    }

    注意这里的table, 是用reflected的多项式生成的.

    initial value也是reflected的. 为了get_msg_byte不需要reflect, 那么

    table中, index也是被reflected了.

    ///

    ///

    4: 可变参数

    我们知道了, CRC算法受到下列形态的影响

    * 多项式的w, 以及多项式

    * initial value

    * 做处理的时候是 MSBF还是LSBF

    * final register

    (同initial value, 为了区分不同的crc, 当同一个消息时,

    所以定义了最后的xor final register)

    下面给出一种模型.

    Rocksoft^tm Model CRC Algorithm

    Name, Width, Poly, Init, Refin, Refout

    下列是一份常用的CRC列表

    X25   standard : 1021       [CRC-CCITT, ADCCP, SDLC/HDLC]

    X25   reversed : 0811

    CRC16 standard : 8005

    CRC16 reversed : 4003       [LHA]

    Name   : "CRC-16"

    Width  : 16

    Poly   : 8005

    Init   : 0000

    RefIn  : True

    RefOut : True

    XorOut : 0000

    Check  : BB3D

    Name   : "CRC-16/CITT"

    Width  : 16

    Poly   : 1021

    Init   : FFFF

    RefIn  : False

    RefOut : False

    XorOut : 0000

    Name   : "XMODEM"

    Width  : 16

    Poly   : 8408

    Init   : 0000

    RefIn  : True

    RefOut : True

    XorOut : 0000

    Name   : "ARC"

    Width  : 16

    Poly   : 8005

    Init   : 0000

    RefIn  : True

    RefOut : True

    XorOut : 0000

    Name   : "CRC-32"

    Width  : 32

    Poly   : 04C11DB7        [PKZIP, AUTODIN II, Ethernet, FDDI]

    Init   : FFFFFFFF

    RefIn  : True

    RefOut : True

    XorOut : FFFFFFFF

    Check  : CBF43926

    ///

    展开全文
  • 单片机查表法总结

    千次阅读 2021-06-05 10:42:24
    //单片机查表法 //第一种:固定值查表 if(input >= 20) { output = 0; } else if(input <= 40) { output = 1; }else { output = 2; } //第二种:读ROM值查表 读取存在ROM中的值,ROM的值可以...

    个人总结的C语言环境下的集中查表的方法。

    void free_test(int input)
    {
    	int output;
        //单片机查表法
        //第一种:固定值查表
    	if(input >= 20)
    	{
    		output = 0;
    	}
    	else if(input <= 40)
    	{
    		output = 1;
    	}else
    	{
    		output = 2;
    	}
    	//第二种:读ROM值查表  读取存在ROM中的值,ROM的值可以被外部函数给改变
    	if(input >= 20)
    	{
    		output = read_ROM_byte(0x30);
    	}
    	else if(input <= 40)
    	{
    		output = read_ROM_byte(0x31);
    	}else
    	{
    		output = read_ROM_byte(0x32);
    	}
    	//第三种:函数查表 分为常函数查表法和变函数查表法  
    
    	//常函数查表法
    	output = input * 20 -5 + cos(input);
    
    	//变函数查表法
    	/*先读取ROM中的值,计算得出函数的表达式,接下来
    	就和常函数查表法一致了,将input代入函数中得到output*/
    }
    

    原创文章,转载请附链接

    展开全文
  • 技术实现要素: 为了克服现有技术的不足,本发明提供一种基于快速查表法的解速度模糊算法,能够提高解模糊的效率和可靠性。 本发明解决其技术问题所采用的技术方案包括以下步骤: 1)创建不同FFT点数n的N行5列的速度...
  • 常用二分查表法函数

    千次阅读 2018-12-07 13:57:14
    二分查表法查找效率相较于普通查表法,效率较为高效,常用于嵌入式开发中,如温度采集等。 本函数基于网上的案例加以整理并实际多次应用验证无误,现贴源码如下并加以注解: //////////////////////////////////////...
  • CRC32 查表法 java

    2020-12-24 02:03:36
    public static int Calc(byte[] content){int crc32 = 0xffffffff;for(int i=0;icrc32 = (crc32<<8)^TABLE[(reverse(content[i],8)^(crc32>>24))&0xFF];}return reverse(crc32^0xffffffff,32);...
  • 循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力 的校验码,在通信中运用广泛。 CRC 计算可以靠专用的硬件来实现,但是对于低 成本的微控制器系统,在没有硬件支持下实现 CRC 检验,关键的...
  • 首先感谢以下博客的博主提供的参考公式:...在步进电机控制中往往需要对步进电机进行加减速控制,以达到平缓启停或者达到较高转速而不失步停转的目的,而在加减速控制中控制方法两类: ...
  • CRC8的查表法实现!

    千次阅读 2020-12-24 02:05:14
    static unsigned char CRCBZ[]={0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,0x70,0x77,0x7E,0x79,0x6C,0x6B,0x62,0x65,0x48,0x4F,0x46,0x41,0x54,0x53,0x5A,0x5D,0xE0,0xE7,...
  • CRC32查表法

    2021-01-14 04:42:39
    1 static const u_int32 CRC32_Table[256] =2 {3 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,4 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,5 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,...
  • CRC-16 校验码计算方法: 常用查表法和计算法。计算方法一般都是: ( 1 )、预置 1 个 16 位的寄存器为十六进制 FFFF (即全为 1 ),称此寄存器为 CRC 寄存 器; ( 2 )、把第一个 8 位二进制数据(既通讯信息帧...
  • 用go仿写了一个CRC16校验方法var (aucCRCHi = []byte{0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0...
  • CRC算法 个人学习笔记 直接法、查表法注意点

    万次阅读 多人点赞 2017-12-09 17:00:09
    1、CRC算法会根据选择生成的检验码的长度,需要设置一个生成多项式,一般会使用国际上几个大厂或者行业内的常用的标准多项式,而且这些标准还有其他选项细微的差别, 比如初始值的设置、是从数据的MSB/LSB开始计算、...
  • 同时T+2天,会算法刷题、Python及数据分析的练习题。 就这样T天拆Python书,T+1天拆算法书,T+2天练习题,周而复始。当这轮拆书完成后,继续拆另一本,全年下来,至少会拆完3本Python和数据分析书,3本算法书。 Q2...
  • crc8查表法校验程序和校验检查软件

    热门讨论 2012-08-03 20:25:07
    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 CRC校验可以简单地描述为:例如我们要发送一些数据(信息字段),...
  • CRC16是单片机程序中常用的一种校验算法。依据所采用多项式的不同,得到的结果也不相同。...闲言少叙,下面是查表法计算CRC16的代码:/*****************************************************************...
  • CRC16为通讯领域常用的校验算法,其原理想必大家都很清楚。下面为相关的总结和封装类代码。 Unicode环境下要将Cstring转换为Char*字符串要对字符串的宽度进行转换,转换方法主要用到WideCharToMultiByte()函数...
  • CRC查表算法(C)

    2021-01-14 04:42:43
    //CRC查表法//索引CRC的方式比对报文缓存区的每个新字符都计算新的CRC值得方法更快捷。//声明两个参数//unsigned char *puchMsg; //含有生成CRC所使用的二进制数据的报文缓存区指针。//unsigned short usDataLen; //...
  • 一、 Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git commit -am "init" 提交并且加注释 git remote ...
  • 1242_C语言实现简单的查表

    千次阅读 2022-05-18 21:11:39
    全部学习汇总: GreyZhang/c_basic: little bits of c....这一次来总结一下C语言中常用的一个技巧——查表法。 通常来说,简单的处理使用查表法的时候都是为了追求开发上的快速而决定的。查表不见得会是最简
  • 接收端接收到数据后,对接收的数据使用CRC算法进行计算,计算的结果与附加在数据包结尾的校验值进行对比,如果对比一致,则可以断定接收的数据就是发送端发送的数据,否则,接收到的数据误,丢弃。 帧头(2字节,...
  • P1 外接 4x4 键盘的反转法扫描 V4 扦测程序无错但 三处警告 2009 11 07 10 53 P1 口外接 4 4 按键 常用的读出键值的方法 查表法 和 反转法 查表法的程序最为简短 但是稍多占用一点存储空间 反转 法的程序执行...
  • 常用的机器学习库函数速查表,涵盖了Numpy Keras Pandas Scipy Matplotlib Scikit-learn

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,214
精华内容 3,285
热门标签
关键字:

常用的查表法有