1

在服务器端,我有返回 unsigned long 值的函数(服务器是用 C++ 编写的),可以说:

class Sth {

private:
   CORBA::ULong u;
public:
   CORBA::ULong get()
   {
    return this.u;
   }

};

如何将(在客户端)从服务器返回的值分配给变量?我的意思是,Java 中没有 unsigned long ... 可以将它分配给 long 吗?像这样:

// corba client stuff
long var = server_obj.get();

会好吗?

4

3 回答 3

4

您必须查看 IDL 映射。unsigned long映射到CORBA::ULongC++ 和intJava 中的 OMG IDL。有关 CORBA 语言映射的更多信息,请参阅IDL 到 Java 映射IDL 到 C++映射。

于 2012-09-18T10:10:51.843 回答
0

尝试在 java 中使用 BigInteger 类而不是 long。没有任何其他方便的方法可以进行这种转换。

于 2012-09-14T17:34:05.213 回答
0

在许多情况下,您知道 unsigned long 永远不会超过 2^31,即 MAX_LONG。然后在 Java 中使用 long 是好的。

在其他一些情况下,实际值几乎没有意义,只要它们是唯一的,例如某种句柄。同样,您可以使用 jlong​​。

在其他情况下,Java 仅用作中间体,如果从 C 到 Java 到 C 的转换是正确的,那么您不必关心途中是否存在有符号/无符号不匹配。

但是如果上述例外都不成立,您应该使用 BigInteger 或重新发明它(坏主意

于 2012-09-14T18:16:29.690 回答