精华内容
下载资源
问答
  • 今天小编就为大家分享一篇关于嵌入式C语言查表法在项目中的应用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 在设计内存管理器时,经常需要根据内存的size找到对应的数组index,查表是个不错的解决办法。假设有一个数组,数组中每个元素代表一个范围,任意给定一个数,要尽可能快得找到其对应的数组索引,有什么好的办法么?...

    在设计内存管理器时,经常需要根据内存的size找到对应的数组index,查表是个不错的解决办法。

    假设有一个数组,数组中每个元素代表一个范围,任意给定一个数,要尽可能快得找到其对应的数组索引,有什么好的办法么?

    例如,数组为范围  [0,1) [1,2) [2,4) [4,8) [8,16) [16,32) [32,64) [64,128)

    索引    0     1     2     3     4       5       6       7

    给定一个数37,那么由于在[32,64)范围内,故应返回索引6.通过以下程序可生成一张索引表:

    #include

    #define MIN_MASK 5

    #define MAX_MASK 12

    #define MIN_VALUE (1<

    #define MAX_VALUE (1<

    #define DIF_VAL (1<

    #define ONELINE_MASK 4

    #define ONELINE (1<

    int main(void)

    {

    FILE* fp=fopen("data.txt","w");

    fprintf(fp,"static char index_table[]={\n\t");

    int idx=0,idv=1,lnc=1,i;

    for(i=0;i

    {

    if(i>=idv)

    {

    idx++;idv<<=1;

    }

    if(lnc>ONELINE)

    {

    fprintf(fp,"\n\t");

    lnc=1;

    }

    fprintf(fp,"%d, ",idx);

    }

    fprintf(fp,"\n};");

    fclose(fp);

    return 0;

    }

    生成如下查找表

    static char index_table[]={

    0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,

    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

    };

    ~

    则可通过size_to_index完成从size到index的转换int size_to_index(unsigned int

    size)

    { return index_table[size >> MIN_MASK];}

    展开全文
  • 今天就说一说查表法,如果在程序中运用查表法,不论多么复杂的程序,只要符合一张表,那都可以实现,非常简单,体力活而已,接下来看看下面这个程序,对上面这个进行操作吧。#include #include ...

    就像下面的这个表

    b6c5ddb3041719e36bc0e4f0872c1a99.png

    之前写过上面这个标题的一篇文章,讲的是以位移的方式去遍历表中的数据,效率非常高,但是,如果要实现一个乱序的流水灯或者跑马灯的话,思考一个这样的算法是不可取的,很费时间,也很费脑力,于是,今天就说一说查表法,如果在程序中运用查表法,不论多么复杂的程序,只要符合一张表,那都可以实现,非常简单,体力活而已,接下来看看下面这个程序,对上面这个进行操作吧。

    #include

    #include

    //这里的行可以自由写,这样就不受限制,想做出什么样的效果都可以。

    int array[][10] = {

    0x03,0x00,0x00,0x00,0x00,//第一列

    0x00,0x02,0x00,0x00,0x00,

    0x0C,0x00,0x00,0x00,0x00,//第二列

    0x00,0x04,0x00,0x00,0x00,

    0x10,0x00,0x00,0x00,0x00,//第三列

    0x00,0x08,0x00,0x00,0x00,

    0x60,0x00,0x00,0x00,0x00,//第四列

    0x00,0x10,0x00,0x00,0x00,

    0x80,0x01,0x00,0x00,0x00,//第五列

    0x00,0x20,0x00,0x00,0x00,

    0xAA,0x55,0x00,0x00,0xC0,//end

    0x00,0x00,0x00,0x00,0x00,

    };

    void to_Q112_cmd_designator_LED(int *array)

    {

    int i;

    for(i = 0; i < 10; i++)

    {

    printf(" %3d ", *(array+i));

    }

    printf("\n");

    }

    void delay_500ms(void)

    {

    Sleep(500);

    }

    int main(void)

    {

    int i,j;

    int tick;

    int count = 0;

    while(array[count][0] != 0xAA || array[count][1] != 0x55)//如果当数组第count行第0列等于0xAA,或者第count行第1列等于0x55时,那么就退出,否则就循环执行遍历数据

    {

    to_Q112_cmd_designator_LED((int *)(&array[0][0]+count*10) );//以首元素每次向后偏移10个字节

    delay_500ms();

    count++;

    }

    return 0;

    }

    运行结果:

    3    0    0    0    0    0    2    0    0    0

    12    0    0    0    0    0    4    0    0    0

    16    0    0    0    0    0    8    0    0    0

    96    0    0    0    0    0   16    0    0    0

    128    1    0    0    0    0   32    0    0    0

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    展开全文
  • C语言查表法CRC32

    2021-06-15 14:34:50
    #include <stdio.h> const unsigned int table[] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2...

    #include <stdio.h>

    const unsigned int  table[] = {   
        0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,   
        0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,   
        0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,   
        0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,   
        0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,   
        0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,   
        0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,   
        0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,   
        0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,   
        0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,   
        0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,   
        0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,   
        0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,   
        0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,   
        0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,   
        0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,   
        0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,   
        0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,   
        0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,   
        0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,   
        0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,   
        0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,   
        0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,   
        0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,   
        0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,   
        0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,   
        0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,   
        0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,   
        0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,   
        0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,   
        0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,   
        0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,   
    };

    unsigned int  getCRC(unsigned char* buf, int nLength)
    {
        if (nLength < 1)
            return 0xffffffff;

        unsigned int crc = 0xFFFFFFFF;

        for (int  i = 0; i != nLength; ++i)
        {
            crc = table[(crc ^ buf[i]) & 0xff] ^ (crc >> 8);  
        }

        crc = crc ^ 0xffffffff;

        return crc;  
    }

     

    int main(void)
    {
        unsigned int crc;
        crc = getCRC("1234567890",10);
        printf("crc32 = %x\n",crc);

        return 0;
    }

     

    http://www.ip33.com/crc.html

     

    展开全文
  • 嵌入式C语言查表法的项目应用

    千次阅读 2016-07-01 11:14:21
    思考一个这样的算法是不可取的,很费时间,也很费脑力,于是,今天就说一说查表法,如果在程序中运用查表法,不论多么复杂的程序,只要符合一张表,那都可以实现,非常简单,体力活而已,接下来看看下面这个

    嵌入式C实战项目开发技巧:如何对一个有规律的数组表进行位移操作

    就像下面的这个表

    之前写过上面这个标题的一篇文章,讲的是以位移的方式去遍历表中的数据,效率非常高,但是,如果要实现一个乱序的流水灯或者跑马灯的话,思考一个这样的算法是不可取的,很费时间,也很费脑力,于是,今天就说一说查表法,如果在程序中运用查表法,不论多么复杂的程序,只要符合一张表,那都可以实现,非常简单,体力活而已,接下来看看下面这个程序,对上面这个进行操作吧。

    #include <stdio.h>
    #include <windows.h>
    //这里的行可以自由写,这样就不受限制,想做出什么样的效果都可以。
    int array[][10] =  {
    
    	0x03,0x00,0x00,0x00,0x00,//第一列
    	0x00,0x02,0x00,0x00,0x00,
    	
    	0x0C,0x00,0x00,0x00,0x00,//第二列
    	0x00,0x04,0x00,0x00,0x00,
    	
    	0x10,0x00,0x00,0x00,0x00,//第三列
    	0x00,0x08,0x00,0x00,0x00,
    	
    	0x60,0x00,0x00,0x00,0x00,//第四列
    	0x00,0x10,0x00,0x00,0x00,
    	
    	0x80,0x01,0x00,0x00,0x00,//第五列
    	0x00,0x20,0x00,0x00,0x00,
    	
    	0xAA,0x55,0x00,0x00,0xC0,//end
    	0x00,0x00,0x00,0x00,0x00,
    	
    };
    
    void to_Q112_cmd_designator_LED(int *array)
    {
    	int i;
    	for(i = 0; i < 10; i++)
    	{
    		printf(" %3d ", *(array+i));	
    	}
    	printf("\n");
    }
    
    void delay_500ms(void)
    {
    	Sleep(500);
    }
    
    int main(void)
    {
    	int i,j;
    	int tick;
    	int count = 0;
    	while(array[count][0] != 0xAA || array[count][1] != 0x55)//如果当数组第count行第0列等于0xAA,或者第count行第1列等于0x55时,那么就退出,否则就循环执行遍历数据 
    	{	
    		to_Q112_cmd_designator_LED((int *)(&array[0][0]+count*10) );//以首元素每次向后偏移10个字节
    		delay_500ms();
    		
    		count++;
    	}
    	
    	return 0;
    }
    运行结果:

       3    0    0    0    0    0    2    0    0    0
      12    0    0    0    0    0    4    0    0    0
      16    0    0    0    0    0    8    0    0    0
      96    0    0    0    0    0   16    0    0    0
     128    1    0    0    0    0   32    0    0    0

    展开全文
  • 文章目录函数实现示例代码运行结果 函数实现 /* 16 bit CRC with polynomial x^16+x^12+x^5+1 */ uint16_t crc16_compute(const uint16_t initial_value,const uint8_t *data,const uint32_t data_length) ...
  • // 呼呼.cpp : Defines the entry point for the consoleapplication.//#include "stdafx.h"#include #define pi 3.1415926int _tmain(int argc, _TCHAR* argv[]){FILE *fp=fopen("D:\\t.txt","a+");...
  • 文章目录函数实现示例代码运行结果 函数实现 /****************************************************************************** * CRC-32-IEEE 802.3 * x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 ...
  • // 呼呼.cpp : Defines the entry point for the consoleapplication.//#include "stdafx.h"#include #define pi 3.1415926int _tmain(int argc, _TCHAR* argv[]){FILE *fp=fopen("D:\t.txt","a+");...
  • 查表法:(生成多项式X^8+X^6+X^4+X^3+X^2+X^1)const uchar crctable[] = {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...
  • c语言--查表法

    2021-05-26 21:25:21
    看是否有过重复,在Findvalue中,for循环一直是从0开始,一个一个查询,这样时间复杂度很高,我们想,有没有一种方法使得只查询一次就好,不需要每次都从0开始,所以我们下面就用到了查表法; 也就是,我们新定义一...
  • C语言】使用查表法计算CRC8

    万次阅读 2018-12-14 21:42:41
    当初我们实现的方法是使用查表法,现将实现代码分享下。 //CRC8查表法 static uint8_t R_CRCTABLE[] = //reversed, 8-bit, poly=0x07 { 0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E...
  • CRC32校验算法C语言版(查表法)

    万次阅读 2016-05-16 17:20:27
    CRC算法查表法很常见,但表是怎么来的,有些资料说得不很清楚。 我来说一下我的看法: 1.CRC校验变化太多,有CRC4/5/6/7/8/16/32,每一种的多项式也有很多种变化,并不是一成不变的; 2.输入输出方式也有区别,有...
  • 4*4矩阵 查表法 c语言

    2011-04-05 09:02:44
    4*4矩阵的一般方法,查表法,适合新手使用c语言
  • 问题简述:将100分制的成绩转换成A、B、C、D、E...查表法 来实现,可以做到逻辑简单,程序运行速度快,语句简洁。 #include <stdio.h> int main(void) { int score; char convert[] = "EEEEEEDCBAA"; wh...
  • CRC校验之查表法C语言实现

    千次阅读 2019-03-10 15:00:47
    本文主要参考:http://www.cnblogs.com/esestt/archive/2007/08/09/848856.html ,实现查表法快速计算CRC7. CRC7应用在SD、MMC的数据校验,生成多项式x^7 + x^3 + 1,生成的校验值为7bit.很容易想到数据以 1byte 为...
  • const BYTE chCRCHTalbe[] = // CRC 高位字节值表 { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 153
精华内容 61
关键字:

c语言查表法

c语言 订阅