FastDFS中long2buff解析笔记
来源:互联网 发布:关于北京知实践园作文 编辑:程序博客网 时间:2024/05/16 13:47
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解析笔记
- fastDFS 命令笔记
- FastDFS 学习笔记
- FastDFS学习笔记
- FastDFS学习笔记
- 学习笔记-FastDFS
- FastDFS分布式文件存储系统解析
- Linux中搭建fastDFS
- centos中安装fastdfs
- FastDFS源码阅读笔记(一)
- FastDFS源码阅读笔记(二)
- FastDFS源码阅读笔记(三)
- FastDFS源码阅读笔记(一)
- FastDFS+Nginx安装配置笔记
- FastDFS+Nginx安装配置笔记
- fastdfs学习笔记之安装
- FastDFS+Nginx安装配置笔记
- FastDFS 最新版本 安装笔记
- 简要分析unity3d中剪不断理还乱的yield
- MFC文档视图(三):命令消息路由
- android中设置AlertDialog的大小
- 位运算
- oracle 死锁处理
- FastDFS中long2buff解析笔记
- Spring定时任务的简单例子(转载)
- MFC文档视图(四):类之间的调用
- 【git】简单地使用github当做远程共享仓库
- excel两列对比
- IdentityHashMap
- class std::basic_string 找到一个或多个多重定义的符号
- PS使用技巧
- thisexecutable was created with an evaluation versionexe4j