位图的应用

#include <stdio.h>
#include <inttypes.h>

//一共16位的位图,期中前八位是0,后八位是1
static const uint8_t normal[2] = {
    0 | 0 | 0 | 0 | 0 | 0 | 0 | 0,
    1 | 2 | 4 | 8 | 16 | 32 | 64 | 128,
};

#define BIT_AT(a, i)\
    ((unsigned int) (a)[(unsigned int) (i) >> 3] & \    //计算出i属于第几组
    (1 << ((unsigned int) (i) & 7)))              //计算出i属于第几位

int main(int argc, char **argv)
{

    int i = 0;
    for (i = 0; i < 16; ++i)
    {
        printf("%d\n", BIT_AT(normal, i));
    }
    return 0;
}
结果:
0
0
0
0
0
0
0
0
1
2
4
8
16
32
64
128

应用:通过一个16 * 8的位图可以完整的表明128位的字符合法状况(合法为1,非法为0), 通过该方法可以很快的获得一个字符是否合法(如:是否是合法的url字符)

#include <inttypes.h>
#define T(v) 0

//判断a的第i为是否合法
#ifndef BIT_AT
#define BIT_AT(a, i)                                                \
  (!!((unsigned int) (a)[(unsigned int) (i) >> 3] &                     (1 << ((unsigned int) (i) & 7))))
#endif

//合法的url字符数组,一共128bit;其中合法为1,非法为0
static const uint8_t normal_url_char[32] = {
/*   0 nul    1 soh    2 stx    3 etx    4 eot    5 enq    6 ack    7 bel  */
        0    |   0    |   0    |   0    |   0    |   0    |   0    |   0,
/*   8 bs     9 ht    10 nl    11 vt    12 np    13 cr    14 so    15 si   */
        0    | T(2)   |   0    |   0    | T(16)  |   0    |   0    |   0,
/*  16 dle   17 dc1   18 dc2   19 dc3   20 dc4   21 nak   22 syn   23 etb */
        0    |   0    |   0    |   0    |   0    |   0    |   0    |   0,
/*  24 can   25 em    26 sub   27 esc   28 fs    29 gs    30 rs    31 us  */
        0    |   0    |   0    |   0    |   0    |   0    |   0    |   0,
/*  32 sp    33  !    34  "    35  #    36  $    37  %    38  &    39  ‘  */
        0    |   2    |   4    |   0    |   16   |   32   |   64   |  128,
/*  40  (    41  )    42  *    43  +    44  ,    45  -    46  .    47  /  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/*  48  0    49  1    50  2    51  3    52  4    53  5    54  6    55  7  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/*  56  8    57  9    58  :    59  ;    60  <    61  =    62  >    63  ?  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |   0,
/*  64  @    65  A    66  B    67  C    68  D    69  E    70  F    71  G  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/*  72  H    73  I    74  J    75  K    76  L    77  M    78  N    79  O  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/*  80  P    81  Q    82  R    83  S    84  T    85  U    86  V    87  W  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/*  88  X    89  Y    90  Z    91  [    92  \    93  ]    94  ^    95  _  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/*  96  `    97  a    98  b    99  c   100  d   101  e   102  f   103  g  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/* 104  h   105  i   106  j   107  k   108  l   109  m   110  n   111  o  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/* 112  p   113  q   114  r   115  s   116  t   117  u   118  v   119  w  */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |  128,
/* 120  x   121  y   122  z   123  {   124  |   125  }   126  ~   127 del */
        1    |   2    |   4    |   8    |   16   |   32   |   64   |   0, };

#define IS_URL_CHAR(c)      (BIT_AT(normal_url_char, (unsigned char)c))

#include <stdio.h>

int main(int argc, char **argv)
{
    int i = 0;
    for (i = 0; i < 127; ++i)
    {
        if (IS_URL_CHAR(i))
            printf("%c, %d\n", i, i);
    }
    return 0;
}
时间: 2024-12-21 04:07:30

位图的应用的相关文章

将位图导入为ArcGIS面要素

本文根据笔者经验,介绍一种从位图图像导入ArcGIS称为要素的方法.这种方法适用于从现有出版物图片中获取地理信息的情况. 首先要说明的是,从位图导入要素是非常非常不精确的方式,如果有其它数据来源,那么就不应该采用此方法. 另外,如果位图包含的内容相对简单,区域结构紧凑不零散,则可以考虑ArcMap绘制地图,而不用此方法. 为让表述更直观,笔者从百度卫星地图截取了 辽宁省康平县 西泡子水库附近的区域,作为操作的说明. 00_orign 1. 制作灰度图 为便于在ArcMap中处理,将原始图像的色彩

WPF Canvas转换为位图 (RenderTargetBitmap)

使用 RenderTargetBitmap 的注意事项: 要渲染的Canvas元素要放在Border元素内,并且此Border元素不能设置边框宽度(BorderThickness),不然生成的位图会出现错误.如果需要边框效果,可再加一层Border. 例: cs: RenderTargetBitmap bmp = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, 96, 96, PixelForma

【Bitmap Index】B-Tree索引与Bitmap位图索引的锁代价比较研究

通过以下实验,来验证Bitmap位图索引较之普通的B-Tree索引锁的“高昂代价”.位图索引会带来“位图段级锁”,实际使用过程一定要充分了解不同索引带来的锁代价情况. 1.为比较区别,创建两种索引类型的测试表1)在表t_bitmap上创建位图索引[email protected]> create table t_bitmap (id number(10), name varchar2(10),sex varchar2(1)); Table created. [email protected]>

Gprinter光栅位图点阵数据解析工具

最近参与的项目有一个需求,解析佳博热敏打印机的光栅位图点阵数据并保存为图片文件.数据是通过Bus Hound抓取的,如下图所示. 其中1b 40为初始化打印机的指令,对应的ASCII码为ESC @,1b 4a 18为打印并走纸的指令,对应的ASCII码为ESC J,1d 76 30为打印光栅位图的指令,对应的ASCII码为GS v 0,其后紧跟光栅位图模式(0x00).水平方向位图字节数(0x0036)和垂直方向位图点数(0x0018),后面则为本帧的位图数据(0x36*0x18=1296字节)

vc实现透明位图,透明背景

vc实现透明位图,透明背景 我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并将透明位图在一个对话框中显示了出来. 一.实现方法 绘制"透明"位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为"透明色".通过将位图的背景色指定为"透明色",在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到

猎豹MFC--缩放位图StretchBit()

定义变量: 在初始化对话框中进行初始化: 给菜单添加事件处理: 在 因为打开第二张  图像的时候会失败,是因为没有释放对象,所以增加释放对象的功能: 定义保存旧位图的指针: 初始化该指针: 打开新位图选入DC时把旧位图保存起来: 窗口还要销毁 增加窗口销毁 消息: 也要释放对象: ////////////////////////////////////////////////////////////////////// 放大图像时就把百分比 加上10.然后释放: 释放后会自动转去执行ONpain

位图排序

在<编程珠玑>上看到的,开篇第一个问题,有很多数,小于一个MAXNUM,没有重复的,怎么排序最快. 答案是位图排序. 如果某一位不为0,那么这一位存代表一个数,位数(在序列中的位置)代表这个数. 比方说这些数都存在数组a,然后利用一个数组b,b初始状态各位都为0,然后读取a,如果a[1]=2,那么b[2]为1,a[3]=6,那么b[6]=1. 实现如下: 1 #include <iostream> 2 #include <fstream> 3 #include<s

位图操作和双缓冲机制

位图操作代码部分: CRect rect;  GetClientRect(rect);  pDC->SetMapMode(MM_ANISOTROPIC);  pDC->SetWindowExt(rect.Width(), rect.Height());  pDC->SetViewportExt(rect.Width(), -rect.Height());  pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2); CDC MemDC

位图缩放代码,如何伸拉图片,图片处理

最近在做一个项目需要将RGB图像进行拉伸处理,网上找了下相关资料,多数是建议用线性插值法,由于没有多余时间去研究,所以想找现成的代码用用,可惜试了N多,能用的代码无几,能达到效果的基本上没有.最后找了个支持位图进行缩放处理的,由于我只有RGB数据,这个需要先将RGB数据打包成位图文件,再调用.名字叫CxImage,这是一个图形处理库.源码里生成的基本都是静态库,需要全部编译再lib文件放到自己工程中.关于此类库的使用,这里有解释 我处理的是位图数据,关键代码如下 #include "ximage

(算法)位图BitMap

题目: 给定一数组,大小为M,数组中的数字范围为1-N,如果某带宽有限,无法传输该大小的数组,该怎么办? 思路: 通过位图BitMap来压缩数组,将数组中每个数字在bit位上标志,这样就可以将数组大小压缩很多倍,每个32位int只需要1bit来表示. 代码: #include<iostream> #include<string.h> using namespace std; char* compression(int *A,int imax,int n){ int m=(imax-