Преобразование целых чисел в шестнадцатеричные значения в PHP

#php

#php

Вопрос:

Как я могу преобразовать числа из первого класса в PHP в числа из второго класса, есть ли встроенная функция для преобразования чисел? Также правильно ли мой заголовок «Преобразовать целое число в шестнадцатеричные значения«?

 class Permission {
    const READ         = 1;
    const UPDATE       = 2;
    const DELETE       = 4;
    const COMMENT      = 8;
    const GRANT        = 16;
    const UNDELETE     = 32;
    const WHATEVER     = 64;
}
  

в это

 class Permission {
    const READ     = 0x0001;
    const UPDATE   = 0x0002;
    const DELETE   = 0x0004;
    const COMMENT  = 0x0008;
    const GRANT    = 0x0010;
    const UNDELETE = 0x0020;
    const WHATEVER = 0x0040;
}
  

Обновить

Чтобы подробнее рассказать о том, что я пытаюсь сделать.
В настоящее время я использую первый класс с классом bitmask для настроек,
однако кто-то предложил мне перейти на формат во втором классе.
Однако я не знал, как они получили числа в стиле 0x0020 из чисел в моем 1-м классе.

Теперь я вижу, как получить 20 из 32, но я не знаю, как и почему они добавили перед ним 0x00, чтобы сделать 0x0020 вместо моего исходного 32

Комментарии:

1. Зачем вам нужно их преобразовывать?

Ответ №1:

Вы хотите:

dechex()

http://php.net/manual/en/function.dechex.php

Которые преобразуются из десятичных в шестнадцатеричные.

Ответ №2:

Вы не можете просто ввести шестнадцатеричные числа для начала?

Попробуйте sprintf() /printf() преобразовать их на лету:

 printf('%x', 42); // 2a
  

Комментарии:

1. О, я вижу что-то вроде printf(‘0x00%x’, 64); дало бы результат, спасибо

Ответ №3:

Я здесь немного запутался… 0x01 = 1. 0x020 = 32 и т.д.

Ищете ли вы какие-нибудь формататоры строк, подобные доступным в printf / sprintf? Вы можете использовать маркер %x для вывода шестнадцатеричных значений.

редактировать: Также, да, ваши преобразования верны.

Комментарии:

1. Нули только повышают удобочитаемость. Обычно вы дополняете свои шестнадцатеричные числа нулями, чтобы визуально показать их размер (byte, word, dword и т.д.), Но это не обязательно. 0x20 = 0x0020 = 0x0000020 = 32 десятичных знака.