当前位置: 首页 > news >正文

app网站公司名称正规的企业建站公司

app网站公司名称,正规的企业建站公司,郑州做网站七彩科技,惠州营销网站制作在redis源码中的辅助工具类中#xff0c;主要包括大小端转换、SHA算法以及util.h中对应的算法。 大小端转换#xff1a; LittleEndian#xff1a;低位字节数据存放于低地址#xff0c;高位字节数据存放于高地址。 BigEndian#xff1a;低位字节数据存放于高地址#x…在redis源码中的辅助工具类中主要包括大小端转换、SHA算法以及util.h中对应的算法。 大小端转换 LittleEndian低位字节数据存放于低地址高位字节数据存放于高地址。 BigEndian低位字节数据存放于高地址高位字节数据存放于低地址。 Linux系统中有自带的大小端转换方法16位、32位的转换但是没有针对64位的转换但是redis中加入了对64位数据的大小端转换方法api接口如下 void memrev16(void *p); void memrev32(void *p); void memrev64(void *p); uint16_t intrev16(uint16_t v); uint32_t intrev32(uint32_t v); uint64_t intrev64(uint64_t v);其中以64位为例 void memrev64(void *p) {unsigned char *x p, t;t x[0];x[0] x[7];x[7] t;t x[1];x[1] x[6];x[6] t;t x[2];x[2] x[5];x[5] t;t x[3];x[3] x[4];x[4] t; } x[7]与x[0]、x[6]与x[1]、x[5]与x[2]、x[4]与x[3]进行互换是不是很简单一目了然。 在Redis中加密算法的实现使用的是SHA算法。SHA是安全hash算法与md5一样都是属于消息摘要算法底层实现的机制是hash不可逆的在加密长度上做了很大的扩展安全性也更高长度不超过2^64位的字符串或二进制流最终生成一个20Byte的摘要。 typedef struct {uint32_t state[5];uint32_t count[2];unsigned char buffer[64]; } SHA1_CTX;void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]); void SHA1Init(SHA1_CTX* context); void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len); void SHA1Final(unsigned char digest[20], SHA1_CTX* context); 测试方法或者调用方法如下 int sha1Test(int argc, char **argv) {SHA1_CTX ctx;unsigned char hash[20], buf[BUFSIZE];int i;UNUSED(argc);UNUSED(argv);for(i0;iBUFSIZE;i)buf[i] i;SHA1Init(ctx);for(i0;i1000;i)SHA1Update(ctx, buf, BUFSIZE);SHA1Final(hash, ctx);printf(SHA1);for(i0;i20;i)printf(%02x, hash[i]);printf(\n);return 0; }util.c通用工具类的算法实现具体的API主要涉及的是数字和字符串之间的转换如下: #define MAX_LONG_DOUBLE_CHARS 5*1024int stringmatchlen(const char *p, int plen, const char *s, int slen, int nocase); int stringmatch(const char *p, const char *s, int nocase); int stringmatchlen_fuzz_test(void); long long memtoll(const char *p, int *err); uint32_t digits10(uint64_t v); uint32_t sdigits10(int64_t v); int ll2string(char *s, size_t len, long long value); int string2ll(const char *s, size_t slen, long long *value); int string2l(const char *s, size_t slen, long *value); int string2ld(const char *s, size_t slen, long double *dp); int d2string(char *buf, size_t len, double value); int ld2string(char *buf, size_t len, long double value, int humanfriendly); sds getAbsolutePath(char *filename); unsigned long getTimeZone(void); 根据函数的名字就可以知晓该函数的作用其中有一个方法是ll2string()将long long型数字转字符的方法正常的做法就是除10取余加上对应的数字字符但是要转换的可是long long型数字长度非常长效率会导致比较低所以在Redis中直接按除100算2位2位的赋值而且用数字字符数字做处理直接按下标来赋值避免了对余数的多次判断代码如下: /* Convert a long long into a string. Returns the number of* characters needed to represent the number.* If the buffer is not big enough to store the string, 0 is returned.** Based on the following article (that apparently does not provide a* novel approach but only publicizes an already used technique):** https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920** Modified in order to handle signed integers since the original code was* designed for unsigned integers. */ int ll2string(char *dst, size_t dstlen, long long svalue) {static const char digits[201] 00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899;int negative;unsigned long long value;/* The main loop works with 64bit unsigned integers for simplicity, so* we convert the number here and remember if it is negative. */if (svalue 0) {if (svalue ! LLONG_MIN) {value -svalue;} else {value ((unsigned long long) LLONG_MAX)1;}negative 1;} else {value svalue;negative 0;}/* Check length. */uint32_t const length digits10(value)negative;if (length dstlen) return 0;/* Null term. */uint32_t next length;dst[next] \0;next--;while (value 100) {int const i (value % 100) * 2;value / 100;dst[next] digits[i 1];dst[next - 1] digits[i];next - 2;}/* Handle last 1-2 digits. */if (value 10) {dst[next] 0 (uint32_t) value;} else {int i (uint32_t) value * 2;dst[next] digits[i 1];dst[next - 1] digits[i];}/* Add sign. */if (negative) dst[0] -;return length; } digit[201]就是从00-99的数字字符余数的赋值就通过这个数组高效方便是提高了很多的速度。
http://www.pierceye.com/news/200845/

相关文章:

  • 可以自己做安卓app的网站Wordpress会员插件出错
  • 做网站优化有前景吗可信网站验证服务中心
  • 韩国设计欣赏网站天津工程建设网官方网站
  • 微网站建设多少钱网站空间管理
  • 济南网站制作定制公司wordpress重新安装主题
  • python 网站开发教程怎么做网站跳转
  • 个人盈利网站怎么建立网站建设 深圳 凡科
  • 网站后台登录地址滨州论坛网站建设
  • 怎么给钓鱼网站做防红wordpress插件合集
  • 骆驼网站建设is_category wordpress
  • 网站中链接怎么做的怎么做资源网站
  • 石家庄建站模板搭建cdr做网站分辨率
  • 学校网站建设有限公司长春网站设计策划书
  • 大连网站建设流程图龙信建设集团网站
  • 徐州好点的做网站的公司深圳做商城网站建设
  • 上海龙象建设集团公司网站网站浮动咨询代码
  • 网站制作培训学校手机网站可以做动态吗
  • 企业推广网站网站开发页面怎么进
  • 嘉兴平湖网站建设网站的底部导航栏怎么做
  • 景安 怎么把网站做别名山东新华电脑学院学网站开发
  • 网站开发好还是app好wordpress 禁用修订
  • win7云主机怎么做网站贵州建设监理网站培训通知栏
  • 制作网站免费建站成都设计公司deanzhang
  • 10个网站用户体验优化的研究结果免费图片设计
  • 做明星网站打广告新闻20条摘抄大全
  • 佛山提供网站设计方案公司wordpress 2.0漏洞
  • wordpress建站教程视频教程百度推广登录首页
  • dede织梦php文章图片网站源码 完整后台 带在线音乐做企业网站进行推广要多少钱
  • 网站正在建设中手机版基于wordpress论文
  • 建设培训网站查询战网