Назначение unsigned long (из C ++) в long (Java) в клиент-серверном приложении CORBA?

На стороне сервера у меня есть функция, которая возвращает длинное значение без знака (сервер написан на 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();

это будет хорошо?

1

Решение

Вы должны посмотреть на отображение IDL для этого. unsigned long OMG IDL сопоставлены с CORBA::ULong в C ++ и до int на Яве. обращаться Отображение IDL в Java а также Отображение IDL в C ++ для больше на языковых сопоставлениях CORBA.

4

Другие решения

Попробуйте использовать класс BigInteger в Java вместо long. Нет другого удобного способа сделать это преобразование.

0

Во многих случаях вы знаете, что длина без знака никогда не будет превышать 2 ^ 31, то есть MAX_LONG. Тогда использовать долго в Java все в порядке.

В некоторых других случаях фактические значения имеют небольшое значение, если они уникальны, например, какая-то ручка. Опять же, вы можете использовать Jlong.

В других случаях Java используется только в качестве промежуточного звена, и если преобразование из C в Java в C является правильным, вас не волнует, что на пути было несоответствие со знаком или без знака.

Но если ни одно из вышеперечисленных исключений не выполняется, вы должны использовать BigInteger или заново его создать (плохая идея)

0