Java отрицательный интервал, чтобы преобразовать в шестнадцатеричную систему и поддержать сбои

Это зависит от вашей ситуации. Если вы не используете метод менеджера , тогда using() хорошо, в противном случае вам понадобится db_manager().

Вы можете выбрать базу данных для QuerySet в любой точке «цепочки» QuerySet. Просто вызовите using() на QuerySet, чтобы получить другую QuerySet, которая использует указанную базу данных.

blockquote>

Но если вам нужно использовать методы менеджера, это не сработает.

Следующее объяснение взято из документов :

Скажем, у вас есть собственный метод менеджера, который касается базы данных - User.objects.create_user(). Поскольку create_user() является методом менеджера, а не методом QuerySet, вы не можете сделать User.objects.using('another_db').create_user(). Метод create_user() доступен только для User.objects менеджера, но не для QuerySet объектов, полученных от менеджера. Решение состоит в том, чтобы использовать db_manager(), например так:

User.objects.db_manager('another_db').create_user(...)

db_manager() возвращает копию менеджера, привязанного к указанной вами базе данных.

8
задан Gurwinder Singh 1 January 2017 в 06:04
поделиться

4 ответа

Документировано, что Integer.toHexString возвращает строковое представление целого числа как беззнаковое значение, тогда как Integer.parseInt принимает целое число со знаком. Если вы вместо этого используете Integer.toString (value, 16) , вы получите то, что хотите.

12
ответ дан 5 December 2019 в 05:13
поделиться

Вам необходимо включить отрицательный знак .

У меня нет доступа, чтобы проверить это прямо сейчас, но я готов поспорить, если бы вы вместо этого попробовали это значение:

Integer min = Integer.MIN_VALUE + 1;

Он не будет бомбить, но даст положительное число (не отрицательное), когда вы запустите ParseInt (min, 16) .

строка битов не На самом деле недостаточно информации для определения знака в этом контексте, поэтому вам необходимо ее предоставить. (рассмотрим случай, когда вы используете min = "F" . Это +/- F? Если вы преобразовали его в биты и увидели 1111, и , вы знали, что это байт, вы можете сделать вывод, что это отрицательно, но это много «если».

1
ответ дан 5 December 2019 в 05:13
поделиться

Try this:

public class Main3 {
    public static void main(String[] args) {
        Integer min = Integer.MIN_VALUE;
        String minHex = Integer.toHexString(Integer.MIN_VALUE);

        System.out.println(min + " " + minHex);
        System.out.println(Integer.parseInt( "-" + minHex, 16));
    }

}

to get this:

-2147483648 80000000
-2147483648
2
ответ дан 5 December 2019 в 05:13
поделиться

This is something that's always annoyed me. If you initialize an int with a hex literal, you can use the full range of positive values up to 0xFFFFFF; anything larger than 0x7FFFFF will really be a negative value. This is very handy for bit masking and other operations where you only care about the locations of the bits, not their meanings.

But if you use Integer.parseInt() to convert a string to an integer, anything larger than "0x7FFFFFFF" is treated as an error. There's probably a good reason why they did it that way, but it's still frustrating.

The simplest workaround is to use Long.parseLong() instead, then cast the result to int.

int n = (int)Long.parseLong(s, 16);

Of course, you should only do that if you're sure the number is going to be in the range Integer.MIN_VALUE..Integer.MAX_VALUE.

12
ответ дан 5 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: