如何将int转换为LPBYTE

时间:2015-03-17 07:24:47

标签: c++ casting

我需要将int值转换为LPBYTE。当我看到定义是这样的节目。我不确定far这个词是什么意思。

typedef unsigned char       BYTE;
typedef BYTE far            *LPBYTE;
  1. ' far'
  2. 的含义是什么?
  3. 如何将int值转换为LPBYTE
  4. 修改

    foo(LPBYTE x){
    }
    
    int main()
    {
     int y = koo();
     foo(y); // how to cast here
     return 0;
    }
    

    实际代码

     int iVal = 0;
     LONG res = RegQueryValueEx(hKey, L"UseSystemSeparators", NULL, &lpType, (LPBYTE)iVal, &size);
    

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要变量的地址,然后将该地址转换为LPBYTE

然后你需要在变量上使用address-of运算符&来获取指向变量的指针,并转换该指针:

foo(reinterpret_cast<LPBYTE>(&y));

如果变量实际上保存了一个地址,那么首先必须非常小心,因为它不能保证int可以保存一个内存地址(即一个指针)。例如,在指针为64位的64位系统上,但int通常仍为32位类型。

改为使用intptr_t,保证大到足以容纳int或指针。

然后你应该这样做。

intptr_t y = ...;

foo(reinterpret_cast<LPBYTE>(y));

<击>

答案 1 :(得分:0)

  

我不确定说的是什么。

far是一个32位指针,由16位“选择器”组成,有助于确定存储区的起始地址,以及16位到存储区的偏移量。

您可以像这样投射变量:

int main()
{
 int y = koo();
 foo(static_cast<LPBYTE>(&y)); 
 return 0;
}