Учитывая целое число без знака, мне нужно получить шестизначное шестизначное шестнадцатеричное значение.
- 81892 (шестнадцатеричный: 13FE4) должен стать 13FE40 или 013FE4
- 3285446057 (шестнадцатеричный: C3D3EDA9) должен стать C3D3ED или D3EDA9
Поскольку в проекте, в котором я участвую, используется Qt, я решаю проблему следующим образом:
unsigned int hex = qHash(name);
QString hexStr = (QString::number(hex, 16) + "000000").left(6);
bool ok;
unsigned int hexPat = hexStr.toUInt(&ok, 16);
Это дополняет строку шестнадцатеричных чисел справа, а затем обрезает ее после шестого символа слева. Чтобы сделать наоборот, я бы просто заменил вторую строку:
QString hexStr = ("000000" + QString::number(hex, 16)).right(6);
Значение будет использоваться для значений RGB, которые вот почему мне нужно шесть шестнадцатеричных цифр (три значения от 0 до 255).
Есть ли более эффективный способ достичь одного (или обоих) этих результатов без преобразования в строку, а затем обратно?
BYTE
определяется какunsigned char
. Вероятно, это может работать так же хорошо, хотя и менее конкретно, с int или uint, в зависимости от того, где значения должны быть позже. 01.11.20150x12345678
, который вы хотите получить0x123456
, но если у вас есть0x00345678
, вы хотите получить0x345678
? Вы можете проверить, является ли самый старший байт0
, а затем решить, какие 3 байта взять. 02.11.2015