wchar_t*到short int的转换

wchar_t* to short int conversion

本文关键字:int 转换 short wchar      更新时间:2023-10-16

第三方类中的一个函数返回一个持有资源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位。另外一个问题:为什么不使用无符号短整型,而不是(有符号)短整型?

一般来说,知道比特的确切数量会让事情变得更可预测,也更容易知道当你投射或使用比特掩码时会发生什么。