Если вы действительно хотите геометрию, вы можете использовать QDesktopWidget
, чтобы получить информацию о дисплее, включая геометрию.
Если вы просто хотите, чтобы окно но вы должны использовать QWidget::setWindowState
, поскольку предложил Andrew .
Вот некоторые общие опции, заказанные от простого (острота) к комплексу (огромная библиотека).
Одно очень простое решение должен использовать BigInteger
шестнадцатеричное представление:
new BigInteger(1, someByteArray).toString(16)
Примечание, что, так как это обрабатывает числа не произвольный строки байтов , это опустит начальные нули - это может или не может быть тем, что Вы хотите (например, 000AE3
по сравнению с 0AE3
). Это также очень медленно, приблизительно [1 123] 50x медленнее по сравнению со следующей опцией.
Вот является полнофункциональным фрагментом кода, поддерживающим верхний/строчный и порядок байтов . Это оптимизировано, чтобы минимизировать сложность памяти и максимизировать производительность и должно быть совместимо со всеми современными версиями Java (5 +).
private static final char[] LOOKUP_TABLE_LOWER = new char[]{0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66};
private static final char[] LOOKUP_TABLE_UPPER = new char[]{0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46};
public static String encode(byte[] byteArray, boolean upperCase, ByteOrder byteOrder) {
// our output size will be exactly 2x byte-array length
final char[] buffer = new char[byteArray.length * 2];
// choose lower or uppercase lookup table
final char[] lookup = upperCase ? LOOKUP_TABLE_UPPER : LOOKUP_TABLE_LOWER;
int index;
for (int i = 0; i < byteArray.length; i++) {
// for little endian we count from last to first
index = (byteOrder == ByteOrder.BIG_ENDIAN) ? i : byteArray.length - i - 1;
// extract the upper 4 bit and look up char (0-A)
buffer[i << 1] = lookup[(byteArray[index] >> 4) & 0xF];
// extract the lower 4 bit and look up char (0-A)
buffer[(i << 1) + 1] = lookup[(byteArray[index] & 0xF)];
}
return new String(buffer);
}
public static String encode(byte[] byteArray) {
return encode(byteArray, false, ByteOrder.BIG_ENDIAN);
}
Это по существу использует код в опции 3. Если Вы хотите видеть некоторых , микро сравнительный тест JMH , сравнивая несколько реализаций, видит здесь . Полный исходный код с лицензией Apache v2 и декодером может быть найден здесь .
При работе над моим предыдущим проектом, я создал этот небольшой инструментарий для работы с байтами в Java. Это не имеет никаких внешних зависимостей и совместимо с Java 7 +. Это включает, среди других, очень быстрого и хорошо протестированного ШЕСТНАДЦАТЕРИЧНОГО en/decoder:
import at.favre.lib.bytes.Bytes;
...
Bytes.wrap(someByteArray).encodeHex()
можно проверить его на [1 114] GitHub: Java байтов .
, Конечно, существует польза 'ol кодеки свободного городского населения . ( мнение о предупреждении вперед ) При работе над проектом, обрисованным в общих чертах выше, я проанализировал код и был вполне разочарован; много дубликата неорганизованный код, устаревшие и экзотические кодеки, вероятно, только полезные для очень немногих и вполне по спроектированным и медленным реализациям популярных кодеков (конкретно Base64). Я поэтому сделал бы обоснованное решение, если Вы хотите использовать его или альтернатива. Так или иначе, если Вы все еще хотите использовать его, вот фрагмент кода:
import org.apache.commons.codec.binary.Hex;
...
Hex.encodeHexString(someByteArray));
, Как правило, Вы уже имеете Гуава как зависимость. Раз так просто используйте:
import com.google.common.io.BaseEncoding;
...
BaseEncoding.base16().lowerCase().encode(someByteArray);
, Если Вы используете платформа Spring с [1 118] безопасность Spring , можно использовать следующее:
import org.springframework.security.crypto.codec.Hex
...
Hex.encode(someByteArray);
<час> В предыдущем Java (8, и ниже) присваивает версию коду Java для JAXB, был включен как зависимость во время выполнения. Начиная с Java 9 и модуляризация Мозаики Ваш код не может получить доступ к другому коду за пределами, он - модуль. Так знайте, если Вы получаете исключение как:
java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
при работе JVM с Java 9 +. Раз так тогда переключите реализации на любую из альтернатив выше. См. также этот вопрос .