проблема при преобразовании файла .const (С++) в класс .java

У меня есть файл .const, скажем, abc.const (файл cpp). содержимое этого файла,

xyz :ullong:0x1000000000000000ULL yub :ullong:0x0100000000000000ULL .... ....

теперь у меня есть программа для преобразования этого файла в класс .java.

Но когда я пытаюсь выше,

я получил следующую ошибку

abc.java:255: ';' ожидаемый публичный статический финал long xyz = 0x1000000000000000ULL;

как мне это решить. заранее спасибо??

(мне нужно создать класс .java из этого файла .const, решив это)


person Logeshwari Ram    schedule 19.04.2011    source источник


Ответы (2)


  • В Java нет беззнаковых типов, поэтому нет спецификатора числового литерала «U».
  • Вы используете только один L для длинного в Java, который всегда равен 64 битам.
  • Кажется, у вас есть два начальных 0 перед x.

Таким образом, Java будет:

public static final long xyz = 0x1000000000000000L;

Обратите внимание, что это не будет точным эквивалентом C++ из-за того, что в Java нет беззнаковых типов, как упоминалось ранее. Если вам нужно представить значения больше Long.MAX_VALUE, вы должны использовать BigInteger класс. Если вы нашли с ограниченным диапазоном long, вам лучше придерживаться примитивного типа.

person Jon Skeet    schedule 19.04.2011
comment
о да, спасибо, Джон, так что я должен использовать этот класс в программе, которая генерирует класс .java, верно? - person Logeshwari Ram; 19.04.2011
comment
@ Джон Скит - спасибо за информацию. но я могу изменить только файл .const. Класс .java создается, когда я создаю файл .const. поэтому файл .const, как и в С++, не принимает 0x1000000000000000L и выдает предупреждение: целочисленная константа слишком велика для ошибки типа «длинный». так что мы можем сделать сейчас? - person Logeshwari Ram; 19.04.2011
comment
@Logeshwari: Похоже, вам нужно изменить любой инструмент, создающий файл Java, чтобы он стал умнее. - person Jon Skeet; 19.04.2011
comment
@ Джон Скит: о, есть идеи, что можно сделать?? например, мы должны написать функцию, которая преобразует ULL (из .const) в L (и суффикс в файле .java), например, такой или любой другой ?? - person Logeshwari Ram; 19.04.2011
comment
@Logeshwari: мне не ясно, что такое формат файла .const или что вы используете для его преобразования в Java, но похоже, что этот инструмент нуждается в большем понимании констант как C ++, так и Java. Вы не можете просто использовать текст напрямую и ожидать, что он будет работать на обоих языках. - person Jon Skeet; 19.04.2011

В Java нет эквивалента unsigned long long

Если вам нужно такое большое число, вам придется использовать класс BigInteger:

http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html

При этом максимальное значение для java long равно 2 ^ 63-1. Если это достаточно для вас, просто измените

0x100000000000000ULL

to

0x100000000000000L
person Brian Roach    schedule 19.04.2011
comment
Вы удалили спецификатор hex, который полностью меняет значение. - person Jon Skeet; 19.04.2011
comment
@ Джон Скит - спасибо за информацию. но я могу изменить только файл .const. Класс .java создается, когда я создаю файл .const. поэтому файл .const, как и в С++, не принимает 0x1000000000000000L и выдает предупреждение: целочисленная константа слишком велика для ошибки типа «длинный». так что мы можем сделать сейчас? - person Logeshwari Ram; 19.04.2011
comment
@ Брайан Роуч - спасибо за информацию. но я могу изменить только файл .const. Класс .java создается, когда я создаю файл .const. поэтому файл .const, как и в С++, не принимает 0x1000000000000000L и выдает предупреждение: целочисленная константа слишком велика для ошибки типа «длинный». так что мы можем сделать сейчас? - person Logeshwari Ram; 19.04.2011
comment
Пунт? Извините... У меня нет ответа на этот вопрос, я никогда не делал того, что вы пытаетесь сделать. Что генерирует Java? - person Brian Roach; 19.04.2011
comment
@logeshwari-ram, если я сделаю public static final long L = 0x100000000000000L;, он отлично скомпилируется. Можете ли вы дать точную строку кода и сообщение об ошибке? - person Peter Lawrey; 19.04.2011