导航

08 2013 档案

摘要:之前网上看的若干算法,无非两个原则:坏字符原则、好后缀原则。按照算法所述实现了一个版本,但发现其效率还不如本文所述的实现方式。个人分析效率较低的原因可能是因为不断地向前找坏字符或者好后缀来确定跳跃距离导致的,不断的比对操作应该是影响效率的根源。下面贴一段实现较简单的方法,感谢之前的领导磊哥,实现参照了他的代码。PS:大概看了下ClamAV的BM实现,感觉很复杂。 1 #define BM_TAB_LEN (256) 2 3 uint64_t *InitBMTab(const uint8_t *In_ui8Pattern, uint64_t In_ui64PattLen) 4 { 5 ... 阅读全文

posted @ 2013-08-20 20:07 codeape 阅读(381) 评论(0) 推荐(0)

摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 7 void GetPivot(uint8_t In_ui8A[], int64_t In_i64Begin, int64_t In_i64End) 8 { 9 uint8_t ui8Tmp = 0; 10 uint64_t ui64PivotIdx = 0; 11 if (In_ui8A == NULL || In_i64Begin >= In_i64End) 12 { 13 ... 阅读全文

posted @ 2013-08-13 19:53 codeape 阅读(757) 评论(0) 推荐(0)

摘要:深度优先的遍历网上一大把,就是递归调用,这里就不说了,说点网上找不到的。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 typedef int8_t (__stdcall *P_WALKDIR_CALLBACK)(const char *In_pcFilePath); 9 10 int8_t WalkDir(const char *In_pcRootDir, P_WALKDIR_CALLBACK In_pfunCallBack)11 {12 int8_t i8R... 阅读全文

posted @ 2013-08-10 18:37 codeape 阅读(1214) 评论(0) 推荐(0)

摘要:上代码之前先讲个笑话:曾经有位面试官问:“你实现过 唉踢哦诶(音) 吗”? 我第一个想到的是各种OA系统,心想那玩意不多是Java实现的吗。。。过一会想明白了,瞬间石化。。。 1 #include 2 #include 3 4 int8_t Myitoa(int64_t In_i64SrcNum, uint8_t In_i8Radix, char *In_pcDst) 5 { 6 int8_t i8RetVal = 0; 7 //这里强转是为了2、8、16进制显示的时候不需要符号 8 uint64_t ui64SrcNum = (uint... 阅读全文

posted @ 2013-08-10 00:05 codeape 阅读(676) 评论(0) 推荐(0)

摘要:因为左移操作不会导致符号位出现缺位,所以不考虑符号位,低位补0即可;右移操作会涉及到符号位出现缺位的问题,所以在有符号数的右移操作时要考虑符号位怎么补的问题。 左移操作(>)对于无符号数来讲为逻辑右移,对应汇编中的shr,对于有符号数来讲为算数右移,对应汇编中的sar。 对于VC编译器编出来的代码,移位操作的位数保存在cl寄存器。 当移动的位数大于或等于该数据类型位数时,CPU对移动的位数进行基于数据类型位数的取余运算,余数为实际移动的位数。比如uint32_t类型左移32位,实际移动0位,也就是数字保持不变;左移33位,则实际左移1位。 逻辑左移时,高位补0;逻辑右移时,低位补0... 阅读全文

posted @ 2013-08-01 00:04 codeape 阅读(2815) 评论(0) 推荐(0)