首页 / JAVA / java-将位转换为整数
java-将位转换为整数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-将位转换为整数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1825字,纯文字阅读大概需要3分钟。
内容图文
![java-将位转换为整数](/upload/InfoBanner/zyjiaocheng/692/aa2965f5a3a446f8b03b2fdfc8bf50fd.jpg)
我收到一个包含字节数组的数据包,我必须从中获取一些整数值.
这是文档的一部分.有人能帮助我吗?
这是一个4字节数组.
Year from 1990 to 2052 (6 bit), Month from 1 to 12 (4 bit), Day from 1
to 31 (5 bit), Hour from 0 to 23 (5 bit), Minute from 0 to 59 (6 bit),
Second from 0 to 59 (6 bit) Default value: 1 January 2000, 12:00:00
消息的格式为小端.
解决方法:
您需要执行一些按位操作.首先,从字节中构造一个int:
int n = b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24);
然后,将int切成组件.现在,您的问题没有指定字段从右到左或从左到右的方向.这个问题与字节序有关,但不完全相同.因此,我们假设字段从左到右.
良好的意识表明从左到右.这样,就可以比较时间值的整数表示形式-年位的重要性大于月位等,因此,当您比较对应于两个时间点的整数时,您将获得按时间顺序排列的正确结果.
这是给您的心理印象.这是一个整数变量,由位组成:
f e d c b a 9 8 7 6 5 4 3 2 1 0
-----
offset is 6, length is 3
让我们定义一个函数,该函数以给定的偏移量(以位为单位)以给定的长度(以位为单位)从int中获取任意块.
int bits(int n, int offset, int length)
{
//shift the bits rightward, so that the desired chunk is at the right end
n = n >> (31 - offset - length);
//prepare a mask where only the rightmost `length` bits are 1's
int mask = ~(-1 << length);
//zero out all bits but the right chunk
return n & mask;
}
本来可以是单线的,但我想使它具有启发性.下面的答案中的人通过为每个块手动指定移位因子和掩码来有效地内联此功能.
现在让我们分解.假设n来自最上面的代码段:
int year = bits(n, 0, 6),
month = bits(n, 6, 4),
day = bits(n, 10, 5),
hour = bits(n, 15, 5),
min = bits(n, 20, 6),
sec = bits(n, 26, 6);
我们通过将先前字段的总长度组合在一起来获得偏移的值.这是基于以下假设:字段从左到右;如果它们相反,则偏移值将不同.
那有意义吗?
编辑:如果位块右到leftt,那么这是怎么回事:
int sec = bits(n, 0, 6),
min = bits(n, 6, 6),
hour = bits(n, 12, 5),
day = bits(n, 17, 5),
month = bits(n, 22, 4),
year = bits(n, 26, 6);
内容总结
以上是互联网集市为您收集整理的java-将位转换为整数全部内容,希望文章能够帮你解决java-将位转换为整数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。