VC ++无符号长值更改为负数,传递给oracle过程的内容

问题描述 投票:0回答:1

我正在使用C ++ Unsigned Long DWORD数据类型将大于2147483647传递给oracle过程。但在过程中插入负数。不知道为什么。

过程参数定义为数字。

在2003窗口服务器上使用相同的代码。

但是在2012窗口服务器中使用代码并以VS2005 32位模式构建并部署dll时,我面临此问题。

它与Windows,Oracle或C ++有关吗?

c++ oracle c++11 unsigned
1个回答
0
投票

当传递32位参数时,C ++编译器不在乎参数是带符号的还是无符号的,它只是将32位放在堆栈上以传递它们。在代码中比较签名和未签名的问题。

听起来您正在将无符号值传递给期望有符号值的函数。然后,大于2147483647的无符号值将被解释为函数期望的有符号值,这意味着它将被解释为负数。如果您正在调用的函数是Oracle过程,那么我怀疑该过程被定义为接受带符号的值。

© www.soinside.com 2019 - 2024. All rights reserved.