在VC ++中将unsigned long转换为int?

时间:2013-08-08 18:41:49

标签: c++ visual-c++ types casting

我需要将一个'unsigned long'类型参数传递给只接受int的函数。
我没有找到一种安全的方法将其投射到MSDN上。有人可以分享安全功能吗?

2 个答案:

答案 0 :(得分:3)

没有"安全"将unsigned long值转换为int的方法,因为unsigned long可以包含无法在int中表示的值。

你可以这样做:

unsigned long arg = some_value;
if (arg <= INT_MAX) {
    func(arg); // the value will be implicitly converted
}
else {
    // do something else
}

请注意,检查INT_MIN时, 。如果参数为long而非unsigned long,则您需要检查下限和上限:

if (arg >= INT_MIN && arg <= INT_MAX) ...

当然,如果价值不合适,您必须决定该怎么做。

答案 1 :(得分:1)

没有安全的方法,因为unsigned long包含无法在int中表示的值。

但如果您确定转换是安全的,则可以编写(int)argumentstatic_cast<int>(argument)或只是按原样传递参数,语言将自动执行转换。