在 CORBA 客户端/服务器应用程序中将无符号的长整型(从 C++)断言为长整型 (Java)

Assinging unsigned long (from C++) to long (Java) in CORBA client/server app?

本文关键字:长整型 Java C++ 断言 无符号 客户端 CORBA 服务器 应用程序      更新时间:2023-10-16

在服务器端,我有返回无符号长值的函数(服务器是用C++编写的),假设:

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

如何将(在客户端)从服务器返回的值分配给变量?我的意思是,Java 中没有无符号的长...是否可能将其分配给多头?喜欢这个:

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

会好吗?

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

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

在许多情况下,您知道无符号长整型永远不会超过 2^31,也称为.MAX_LONG。那么在Java中使用long是okey。

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

在其他情况下,Java仅用作中间项,如果从C到Java再到C的转换是正确的,则您不在乎过程中是否存在有符号/无符号不匹配。

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