将64位十六进制地址中的位提取到C中的unsigned int

时间:2013-12-15 07:26:41

标签: c caching bit-manipulation

我目前正在研究用C模拟缓存的程序。我一直在研究,我知道如何设置和测试单个位,但是如何从64位十六进制中间提取x位数地址?

例如,我有一个64位十六进制地址。前2位专用于块偏移,后2位专用于设置索引,后6位专用于标记。如何将前2位提取为无符号整数?我怎么能提取接下来的2位?

编辑:这只是一个例子。我希望有一个解决方案可以让你在地址的任何地方获得任意数量的位

第二次编辑:当我说前两位时,我的意思是最低有效位。道歉。

2 个答案:

答案 0 :(得分:2)

从[{1}}转换为uintptr_t并使用<stdint.h>>>提取位。

E.g。

&

答案 1 :(得分:1)

typedef struct parse64 {
    unsigned int get:2,
    unsigned int set:2,
    unsigned int tag:60 // if your system is a64 bit system
} parse64;

在您的代码中:

struct parse64 *parser;
parser = (struct parse64 *) data;

unsigned int get = parser->get;

基于您的编辑

  

编辑:这只是一个例子。我希望有一个解决方案   让你在地址的任何地方获得任意数量的位

您也可以通过按位操作获取数据:

get = data & 0x03 //in binary 0X03 is equivalent to 00....000011
set = (data & 0x12)>>2 //in binary 0X12 is equivalent to 00....001100