java16进制取前几位_如何根据位分隔Java中的十六进制字符串?

我计划从十六进制字符串中提取零件。

1)将十六进制字符串转换为长整型。 2)按位运算符“&”(按位和)和“>>”(按位右移)提取三个部分。

代码:

char* hexStr;

Long original, tag, index,block;

hexStr = "400a3b"; /* This is hex string to be processed */

original = Long.parseLong(hexStr, 16); /* Long converted from hex string */

tag = (original & 0xFFFF80) >> 7; /* mask higher 17 bits , then shift right 7 bits for TAG */

index = (original & 0x000070) >>4; /* mask 18 to 20 bits , then shift right 4 bit for INDEX */

block = original & 0x00000F; /* mask 21-24 bits for BLOCK */

如何知道面具和数据的各种模式转变:(下面的部分是凯文对我的回答评论答案)

要知道面具和移位,让数据进行位布置。 如果数据有2位索引和10位块,其余52位是标记。

我使用't'来表示使用标记的位,'i'表示索引,'b'表示块。

在2位指数和10位块的情况下,数据的比特排列如下

ttttttttttttttttttttttttttttttttttttttttttttttttttttiibbbbbbbbbb // 52 't's, 2 'i's and 10 'b's.

要获取标签中的掩模,更换“T”为1,“i”键0和“b”以0.

1111111111111111111111111111111111111111111111111111000000000000

这是标记的掩码,它可以用十六进制表示为FFFFFFFFFFFFF000。

右边有12个零,所以右移12位是必须的。

在同样的方式,掩码索引和用于块是

0000000000000000000000000000000000000000000000000000110000000000 // 0000000000000C00

0000000000000000000000000000000000000000000000000000001111111111 // 00000000000003FF

和移位索引是10。对于块,它不必偏移。

是否足够清楚?

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页