我需要将int值转换为LPBYTE。当我看到定义是这样的节目。我不确定far
这个词是什么意思。
typedef unsigned char BYTE;
typedef BYTE far *LPBYTE;
修改
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);
答案 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;
}