[英]VC++ Unsigned long value changed to negative number what passing to oracle procedure
[英]Cast unsigned long to int in VC++?
我需要将“ unsigned long”类型参数传递给仅需要int的函数。
我找不到在MSDN上投射它的安全方法。 有人可以分享安全功能来执行此操作吗?
没有将“ unsigned long
int
值转换为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) ...
当然,如果值不合适,您必须决定要怎么做。
没有安全的方法,因为unsigned long
包含无法用int
表示的值。
但是,如果您确定转换是安全的,则可以编写(int)argument
或static_cast<int>(argument)
或直接传递参数,该语言将自动执行转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.