当前位置: 首页 > 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.zqtcl.cn/news/200845/

相关文章:

  • 扬州网站开发个人做美食视频网站
  • 网站建设属于技术服务吗关于网站建设
  • 网站建设推广好处西安工业设计公司
  • 深圳宝安p2p网站系统的建设百度广告联盟标识
  • 企业网站备案怎么填写东莞市场监督管理局官网
  • 网站建站网站91955内蒙古建设集团招聘信息网站
  • 巴中建设厅网站电话seo是网络优化吗
  • 中国做投资的网站做网站的公司怎么推广
  • 专业的广州微网站建设移动应用开发干什么的
  • 网站运营有什么用常熟智能网站开发
  • 如何组建做网站的团队绍兴网站建设推广
  • 资讯类响应式网站模板深圳网站建设培训机构
  • 电子商务网站功能设计3d动画制作过程
  • 随机网站生成器win7asp+sql server 2008做网站
  • 金本网站建设设计江苏建筑业网
  • 校园网站建设的作用淄博网站建设网站推广优化
  • 域名过期了怎么办怎么找回网站校友录网站开发设计
  • 医疗 企业 网站建设seo网络优化是什么工作
  • e时代速递搜索引擎网站建设aso关键词搜索优化
  • 产品单页营销型网站模板龙华网站建设深圳信科
  • 建网站平台要多少钱投资公司取名字大全
  • 建设网站需要哪些设备重庆本地建站
  • 学做家常菜去那个网站专业制作网站制作
  • 合肥网站建设公网站程序如何上传
  • 潍坊网站建设招聘官方网站建设 在线磐石网络
  • 校友网站建设开一个网站的流程
  • 商业门户网站是什么意思哪家培训机构学校好
  • 青岛企业网站制作seo排名优化培训网站
  • 2018做网站还是app上海搜索seo
  • 网站建设用模板好吗罗湖网站制作费用