wchar_t*到short int的转换
wchar_t* to short int conversion
第三方类中的一个函数返回一个持有资源id的wchar_t*
(我不知道为什么它使用wchar_t*type)我需要将该指针转换为short int
这个使用AND运算符的方法对我有效。但它似乎不是正确的方法。有什么合适的方法吗?
wchar_t* s;
short int b = (unsigned long)(s) & 0xFFFF;
wchar_t* s; // I assume this is what you meant
short int b = static_cast<short int>(reinterpret_cast<intptr_t>(s))
您也可以将short int b
替换为auto b
,它将从右侧表达式的类型推导为short int
。
它以wchar_t*
的形式返回资源ID,因为这是Windows用来携带资源标识符的数据类型。资源可以通过数字ID或名称来标识。如果是数字,指针本身包含编码在其低16位中的实际ID号。否则,它是指向内存中其他位置以null结尾的字符串的普通指针。有一个IS_INTRESOURCE()
宏需要区分,这是实际情况,例如:
wchar_t *s = ...;
if (IS_INTRESOURCE(s))
{
// s is a numeric ID...
WORD b = (WORD) s;
...
}
else
{
// s is a null-terminated name string
...
}
您的代码中的意思是wchar_t *s;
吗?
我会使用进行更明确的转换
short int b = reinterpret_cast<short int>(s);
如果它适合您的应用程序需求,我建议使用具有固定位数的数据类型,例如uint16_t。使用短int意味着您只能确定您的变量至少有16位。另外一个问题:为什么不使用无符号短整型,而不是(有符号)短整型?
一般来说,知道比特的确切数量会让事情变得更可预测,也更容易知道当你投射或使用比特掩码时会发生什么。
相关文章:
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将字符串中的 int 转换为字母;
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何将矢量<int>转换为字符数组?
- C++ 无法从 const int* 转换为 const_iterator
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 如何将 int[4] 转换为 std::array<int,4>?
- 如何将data[i].int转换为vaible
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将私有矩阵形式 int 转换为双 C++
- 无法将参数 1 从 'int' 转换为 'int &'
- 将 int 转换为字符串后始终得到 0
- isspace 函数的性能警告,从 int 转换为布尔值
- 将大 int 转换为浮点数,而不舍入 c++
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将未签名的INT转换为BCD
- 在 C++ 中将 int 转换为双精度