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解析笔记相关推荐

  1. mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例

    [学习笔记]Oracle数据库10049用于分析SQL解析笔记案例 时间:2016-11-05 13:54   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 Oracle研究 ...

  2. JAVA方法调用中的解析与分派

    JAVA方法调用中的解析与分派 本文算是<深入理解JVM>的读书笔记,参考书中的相关代码示例,从字节码指令角度看看解析与分派的区别. 方法调用,其实就是要回答一个问题:JVM在执行一个方法 ...

  3. 源码解析:Spring源码解析笔记(五)接口设计总览

    本文由colodoo(纸伞)整理 QQ 425343603 Java学习交流群(717726984) Spring解析笔记 启动过程部分已经完成,对启动过程源码有兴趣的朋友可以作为参考文章. 源码解析 ...

  4. awk,gawk调用shell,bash中的变量 笔记221106

    awk,gawk调用shell,bash中的变量 笔记221106 "'${变量名}'" 双 包 单 包 ${} 包 变量名 "'"${变量名}"'& ...

  5. React深入学习与源码解析笔记

    ***当前阶段的笔记 *** 「面向实习生阶段」https://www.aliyundrive.com/s/VTME123M4T9 提取码: 8s6v 点击链接保存,或者复制本段内容,打开「阿里云盘」 ...

  6. javaSE基础——集合全面解析笔记

    javaSE基础--集合全面解析笔记 英文单词 一.容器定义 1.1.容器继承体系 二.Set--------容器类 部分方法数学集合意义 2.1 HashSet 2.1.1 基本用法 2.1.2 特 ...

  7. obs 源码解析笔记

    obs 源码解析笔记 由于obs rtp音频传输有问题,所以可能需要修改obs源码,学习了两天,发现官方文档有些混乱,国内有关说明又少,特此记录,也方便以后自己查阅.这里主要涉及工作有关源码其他基本略 ...

  8. canvas中的碰撞检测笔记

    2019独角兽企业重金招聘Python工程师标准>>> canvas中的碰撞检测笔记 时间 2016-01-19 08:29:00  博客园精华区 原文    http://www. ...

  9. 管理系统中计算机应用第四章重点,管理系统中计算机应用课堂笔记第四章(4)...

    管理系统中计算机应用课堂笔记第四章(4) 分类:自考 | 更新时间:2016-07-08| 来源:转载 这个分析和抽象工作可分以下三步进行: 5.2.1数据流程图的绘制 数据流程图既是对原系统进行分析 ...

最新文章

  1. 降低函数之间的耦合度
  2. mysql-innodb 日志机制分析----写在死锁前面
  3. Openstack 中的消息总线 AMQP
  4. Android自定义控件(特效二) 点击屏幕,根据所点击的位置绘制桃心
  5. jquery插件之选项卡
  6. 转载:cin总结附带string输入总结
  7. 提取多个字段_动态合并多个工作表,数据再多也不怕
  8. rxtx串口事件不触发_一种串口高效收发思路及方案
  9. 中国体声波器件市场趋势报告、技术动态创新及市场预测
  10. oracle占位符怎么打,PL/SQL Challenge 每日一题:2018-7-11 动态SQL中的占位符
  11. 深度学习笔记_卷积神经网络基本概念
  12. java静态和动态的区别是什么_java中静态资源和动态资源的区别
  13. 箭头函数写法_初探ES6:箭头函数
  14. 搭建一个QQ机器人叫女友起床
  15. WDTP:利器,在于轻便犀利
  16. 【数据分析系列】Python数据预处理总结篇
  17. 什么是拨号Internet连接?
  18. 拉勾网positionAjax获取的时候(带有账号登陆的时候)频繁获取被拉黑
  19. SpaceSyntax【空间句法】之DepthMapX学习:第三篇 软件介绍与一般分析流程图
  20. 新增11条新规约,阿里Java开发手册|黄山版,拥抱规范,远离伤害

热门文章

  1. 关于backiee幻灯片图片保存的问题
  2. CV (1)- Introduction
  3. 深度优先搜索(dfs)简介
  4. DELL服务器 系统格式化[臭章鱼]
  5. 10、使用pods(cocopods)创建XCode工程
  6. vue,js中json对象数组按对象属性排序(sort方法)根据英文首字母进行排序
  7. Java IO流(8)
  8. Jenkins ---- 持续集成工具
  9. USDT增发,疯狂之下的币圈市场机会何在?
  10. 【Linux】什么是文件系统及inode?如何创建软硬链接?软硬链接有什么作用?