在我的C代码中,我想将32/64位系统中的SIZE_T
WINAPI
类型转换为WORD
WINAPI
类型。
#include <Windows.h>
SIZE_T nValueToConvert;
WORD wConvertedValue;
如果
nValueToConvert
对于WORD
类型来说太大,我想知道它并提出一个错误。做这件事的最好和最安全的方法是什么? 最佳答案
存在许多方法来做到这一点。例如,我们可以使用下一个代码:
if ((wConvertedValue = (WORD)nValueToConvert) == nValueToConvert)
{
DbgPrint("convert ok\n");
}
else
{
DbgPrint("too big for WORD\n");
}
但是,这仅对无符号类型有效,即
SIZE_T
和WORD
都是无符号的。如果使用符号类型,比如SSIZE_T nValueToConvert
和SHORT wConvertedValue
,任务会变得更复杂,单独的符号位会在这里产生问题。我想试着截短并检查下一个方法:BOOL Truncate(SSIZE_T nValueToConvert, SHORT* pwConvertedValue)
{
SHORT wConvertedValue;
if (0 > nValueToConvert)
{
wConvertedValue = -(wConvertedValue = ((SHORT)-nValueToConvert));
}
else
{
wConvertedValue = (SHORT)nValueToConvert;
}
*pwConvertedValue = wConvertedValue;
return wConvertedValue == nValueToConvert;
}
Truncate
在SSIZE_T nValueToConvert
范围内时返回true,否则返回false