DWORD GetBitField(BYTE* data, DWORD pos, DWORD len, DWORD max) {
         
return (DWORD)(*(unsigned __int64 *)(data+pos/8)<<(64-len-(pos&7))>>(64-len));
}这是一个函数中的一句,最后这句话我看了半天也不很明白,这是什么意思??函数的功能大概是从data中每次取出len个长度的数据(大概)。主要不明白的是*(unsigned __int64 *)data这个操作。为什么要把BYTE类型的变成__int64类型?这有什么区别,这样子进行后面的移位操作和用BYTE进行移位操作有什么区别??晕哪位可解释一下?

解决方案 »

  1.   

    *(unsigned __int64 *)data---64位整数
      

  2.   

    (data+pos/8)<<(64-len-(pos&7))*(unsigned __int64 *)data __int64 是为了更大的数据范围 安全性
    << >>为移位符 声明为bytge BYTE移位最快(只能按位移动)感觉这个功能是有加密的功能.
      

  3.   

    BYTE是数据包,这个函数从中分析得到的数据(没贴全)。原数据是否加密我不知道,我还没看懂它是怎么分析的。你说__int64的类型变换是在移位操作之后作的??我觉得不是吧,优先级应该类型变换在先吧??
      

  4.   

    那最后返回的是DWORD,32位,为什么要先变成64的__int64呢?晕请教