FastDFS中long2buff解析笔记
long2buff解析笔记
在阅读fastdfs中遇到了long2buffer函数,对于里面的位移操作以及unsigned char* 操作感觉很迷茫> 查找资料后总结如下:
void long2buff(int64_t n, char *buff)
{
unsigned char *p;
p = (unsigned char *)buff;
*p++ = (n >> 56) & 0xFF;
*p++ = (n >> 48) & 0xFF;
*p++ = (n >> 40) & 0xFF;
*p++ = (n >> 32) & 0xFF;
*p++ = (n >> 24) & 0xFF;
*p++ = (n >> 16) & 0xFF;
*p++ = (n >> 8) & 0xFF;
*p++ = n & 0xFF;
};
1.int与char,unsigned char之间相互赋值:
char字面解释,有符号字符型,当用char对int进行赋值时,系统认为最高位是符号位,赋值的时候,就会对最高位进行扩展。unsigned char 字面解释,无符号字符型,当用unsigned char对int赋值时,系统就不会进行扩展。 由于unsigned char类型的变量只有一个字节,表示范围:0~255,char 只有一个字节,表示范围:-128~127。而int类型有4个字节(32位系统下)取值:-2147483648 ~ +2147483647.unsigned int取值范围: 0 ~ 4294967295(4 Bytes) char只有一个字节,int有4个字节, 当把int 变量赋值给 char变量时会发生截断,截断的是unsigned int的(大端下)高位的三字节部分。
1.移位操作:<<左移,>>右移:
<<表示向左移位:n<<1就是左移1位,原来 | 移位后-------- | ---00011001 | 00110010>>表示向右移位:n>>3就是右移1位.左边的移除,右侧补零,相当于/2.原来 | 移位后-------- | ---00011000 | 00001100
1.解析long2buffer:
1.*p++ = (n >> 56) ,移位56位,n变量是64位,右移56位,移动56位,*p++=(n>>48)….*p++(n >> 8) ,这一段话相当于将高8位移位至低8位。也就是移动一个字节
2. & 0xFF,0xFF是16进制,转换为2进制:1111 1111。主要是验证作用
3. & 操作,1&0=0,1&1=1,0&0=0,目的,截断低8位前面的数据。
4. (p)指向第一个unsigned char 数组,*p则是指向的值,‘’和’++’的优先级是相同的,结合是由右到左,所以,P++==(p++),此时还没有到‘;’,语句没结束,p还是指向的第0个,是指向的第一个,到分号后,p的值就是+1,后的了。
这句话的意思是:将n取最高位8个字节,进行验证(&0xFF),后赋值给p指向的第一块unsigned char内存。
到最后结束后,p指向的是第9块内存。
FastDFS中long2buff解析笔记相关推荐
- mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例
[学习笔记]Oracle数据库10049用于分析SQL解析笔记案例 时间:2016-11-05 13:54 来源:Oracle研究中心 作者:HTZ 点击: 次 天萃荷净 Oracle研究 ...
- JAVA方法调用中的解析与分派
JAVA方法调用中的解析与分派 本文算是<深入理解JVM>的读书笔记,参考书中的相关代码示例,从字节码指令角度看看解析与分派的区别. 方法调用,其实就是要回答一个问题:JVM在执行一个方法 ...
- 源码解析:Spring源码解析笔记(五)接口设计总览
本文由colodoo(纸伞)整理 QQ 425343603 Java学习交流群(717726984) Spring解析笔记 启动过程部分已经完成,对启动过程源码有兴趣的朋友可以作为参考文章. 源码解析 ...
- awk,gawk调用shell,bash中的变量 笔记221106
awk,gawk调用shell,bash中的变量 笔记221106 "'${变量名}'" 双 包 单 包 ${} 包 变量名 "'"${变量名}"'& ...
- React深入学习与源码解析笔记
***当前阶段的笔记 *** 「面向实习生阶段」https://www.aliyundrive.com/s/VTME123M4T9 提取码: 8s6v 点击链接保存,或者复制本段内容,打开「阿里云盘」 ...
- javaSE基础——集合全面解析笔记
javaSE基础--集合全面解析笔记 英文单词 一.容器定义 1.1.容器继承体系 二.Set--------容器类 部分方法数学集合意义 2.1 HashSet 2.1.1 基本用法 2.1.2 特 ...
- obs 源码解析笔记
obs 源码解析笔记 由于obs rtp音频传输有问题,所以可能需要修改obs源码,学习了两天,发现官方文档有些混乱,国内有关说明又少,特此记录,也方便以后自己查阅.这里主要涉及工作有关源码其他基本略 ...
- canvas中的碰撞检测笔记
2019独角兽企业重金招聘Python工程师标准>>> canvas中的碰撞检测笔记 时间 2016-01-19 08:29:00 博客园精华区 原文 http://www. ...
- 管理系统中计算机应用第四章重点,管理系统中计算机应用课堂笔记第四章(4)...
管理系统中计算机应用课堂笔记第四章(4) 分类:自考 | 更新时间:2016-07-08| 来源:转载 这个分析和抽象工作可分以下三步进行: 5.2.1数据流程图的绘制 数据流程图既是对原系统进行分析 ...
最新文章
- 降低函数之间的耦合度
- mysql-innodb 日志机制分析----写在死锁前面
- Openstack 中的消息总线 AMQP
- Android自定义控件(特效二) 点击屏幕,根据所点击的位置绘制桃心
- jquery插件之选项卡
- 转载:cin总结附带string输入总结
- 提取多个字段_动态合并多个工作表,数据再多也不怕
- rxtx串口事件不触发_一种串口高效收发思路及方案
- 中国体声波器件市场趋势报告、技术动态创新及市场预测
- oracle占位符怎么打,PL/SQL Challenge 每日一题:2018-7-11 动态SQL中的占位符
- 深度学习笔记_卷积神经网络基本概念
- java静态和动态的区别是什么_java中静态资源和动态资源的区别
- 箭头函数写法_初探ES6:箭头函数
- 搭建一个QQ机器人叫女友起床
- WDTP:利器,在于轻便犀利
- 【数据分析系列】Python数据预处理总结篇
- 什么是拨号Internet连接?
- 拉勾网positionAjax获取的时候(带有账号登陆的时候)频繁获取被拉黑
- SpaceSyntax【空间句法】之DepthMapX学习:第三篇 软件介绍与一般分析流程图
- 新增11条新规约,阿里Java开发手册|黄山版,拥抱规范,远离伤害