美文网首页程序员
ios初步学习按位操作数据——读取

ios初步学习按位操作数据——读取

作者: 谢顶强 | 来源:发表于2020-12-24 14:19 被阅读0次

学习目的:

一般情况下,数据的操作是按照整字节byte(即8bit)来进行的。
但今天在新增硬件兼容的时候,查看对方的设计文档,在一个时间戳传递的时候,却是按照bit来进行的。
一个4byte的数据,首位6bit代表年份,之后4bit代表月份,5bit代表日期,5bit代表时,6bit代表分,6bit代表秒。

数据分析:

已知4个bit位代表的最大值为16,5个bit位代表最大值32,6个bit位代表最大值为64。
所以在月、日、时、分、秒的表示中都不存在数据溢出的问题,但在年份的表示中,6bit位显然不能满足当前2020年的需要,再次查看文档,原来年份的值是以2015年为基准增加的值,这样以来6bit表示的最大年份就可以持续到2079年了,已经满足了实际需要。

按位操作

已知接收到的数据为4byte的NSData类型。
NSData *dateData;

// 声明操作值
unsigned int byteValue;
NSString *dateString = @"";
// 获取byte
unsigned int *dateBytes = (unsigned int *)[dateData bytes];
// 计算年份(前6个bit为年份,+2015为实际年份值)
byteValue = *dateBytes >> 26;
dateString = [NSString stringWithFormat:@"%u", byteValue +2015];
// 计算月份(年份后4个bit位月份)
byteValue = *dateBytes << 6;
byteValue = byteValue >> 28;
dateString = [dateString stringByAppendingFormat:@"%02u", byteValue];
 // 计算日期(月份后5个bit为日期)
byteValue = *dateBytes << 10;
byteValue = byteValue >> 27;
dateString = [dateString stringByAppendingFormat:@"%02u", byteValue];
 // 计算小时(日期后5个bit表示小时)
byteValue = *dateBytes << 15;
byteValue = byteValue >> 27;
dateString = [dateString stringByAppendingFormat:@"%02u", byteValue];
// 计算分钟数(小时后6个bit表示分钟)
byteValue = *dateBytes << 20;
byteValue = byteValue >> 26;
dateString = [dateString stringByAppendingFormat:@"%02u", byteValue];
// 计算秒数(分钟后6个bit为秒数,即最后6位)
byteValue = *dateBytes << 26;
byteValue = byteValue >> 26;
dateString = [dateString stringByAppendingFormat:@"%02u", byteValue];
printf("时间戳:%s\n", dateString);

初步总结

这种按位读取数据,本质上是按位移动一段数据,将指定位的数据移动到最低位,并将其它位置上的数据清除,这样就会得到指定位的内容。

相关文章

  • ios初步学习按位操作数据——读取

    学习目的: 一般情况下,数据的操作是按照整字节byte(即8bit)来进行的。但今天在新增硬件兼容的时候,查看对方...

  • ios初步学习按位操作数据——写入

    知识点: 数据的按位移动 <<,>> 及按位或 | 已知: 手机连接了一个蓝牙设备,在向设备发送数据时,需要将两个...

  • 憶壹月拾壹日

    今天学习的主要是利用IIC总线向EEPROM进行数据传输。在EEPROM中进行读写操作,按位输入按页输入,连续读取...

  • 2018-05-19(IO流)

    IO流概述:用于传输数据 分类: 按流向分: 输入流:读取数据; 输出流:写出数据; 按操作分: 字节流:以字节为...

  • iOS大量数据读取操作

    大量数据读写操作 总结 减少中间的冗余copy操作,节省CPU占用率 异步线程处理、否则卡主线程

  • 第五章 子查询与连接

    数据准备 回顾 记录操作:写操作:INSERT,UPDATE,DELETE读取操作:SELECT 这章主要学习:子...

  • iOS:按位操作符

    进制表示法: 按位操作符 向左移位运算符 << :对值进行向左移动,超出数据项的高位将丢失,低位移入的值总为0,该...

  • 文件操作

    打开方式 按行读取 大文件读写 ----按行 文件/目录的常用操作 os.path.isdir()判断是否位目录,...

  • #数据操作初步

    前面介绍了数据研究平台的安装,这片介绍如何用现成的库以及工具获取和导出数据。大部分的人物可在IDLE里完成。 因为...

  • 从屌丝到架构师的飞越(IO流篇)-缓冲流

    一.介绍 在我们学习字节流与字符流的时候,大家都进行过读取文件中数据的操作,读取数据量大的文件时,读取的速度会很慢...

网友评论

    本文标题:ios初步学习按位操作数据——读取

    本文链接:https://www.haomeiwen.com/subject/gkdmnktx.html