我有下面的函数,它将把一个浮点数转换成int32。问题是,对于负数,它就是不起作用(我的if语句没有执行)。我试过一个类似的程序,把float转换成int16,一切都很好。如果这太简单的话,我就是想不出我遗漏了什么,为什么它对负值不起作用。
#define MaxInt32 2147483647
#define MinInt32 -2147483648
…
bool CastFloatToInt32 ( float fNumber, int32 *ConvertedValue) {
bool CastStatus = False;
if ( ( fNumber >= MinInt32 ) && ( fNumber <= MaxInt32 ) ) {
*ConvertedValue = ( int32 ) ( fNumber );
CastStatus = True;
} else {
if (fNumber < MinInt32) {
*ConvertedValue = MinInt32;
} else {
*ConvertedValue = MaxInt32;
}
}
return CastStatus;
}
最佳答案
你可以在这里找到原因:https://stackoverflow.com/a/20910712/1073171
因此,可以通过将定义更改为以下任一项来修复此代码:
#define MaxInt32 (int32)0x7FFFFFFF
#define MinInt32 (int32)0x80000000
否则:
#define MaxInt32 (int32)2147483647
#define MinInt32 (int32)(-2147483647 - 1)
我在上面链接的答案中给出了理由。如果您使用的是GCC,那么您也可以移动到
-std=gnu99
或类似的位置!