Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 8 из 8
  1. #1
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±

    Некорректный вывод hex-значений

    Вот пример кода:

    1. new varhex = 0x0C135B;
    2. printf("%x", varhex);


    При использовании данного кода в консоль выведется:

    1. C135B


    Почему 0 обрезается? Непонятно.

    А это всего лишь printf, а если такое hex-число обрежется в сообщении?

    1. new hvar = 0x0BC157, str[128+1];
    2. format(str, sizeof(str), "{%x}I am evil!");
    3. SendClientMessage(playerid, COLOR_WHITE, str);


    Вместо цветного текста сообщение будет содержать это:

    1. {BC157}I am evil!


    Как решить эту проблему?

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    wiki:Форматирование строк
    См. пункты "Длина" и "Флаги".
    Пример:
    1. printf("%08x", 0xABCDEF); // "00ABCDEF"
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. Пользователь сказал cпасибо:
    SteveStage (08.09.2020)
  4. #3
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    А из-за чего это вообще происходит? В конце hex-числа, например, нули не обрезаются.

  5. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от SteveStage Посмотреть сообщение
    А из-за чего это вообще происходит? В конце hex-числа, например, нули не обрезаются.
    По той же причине, почему они не обрезаются и в конце "обыкновенных" десятичных чисел: это значимая часть числа, в отличие от нулей слева.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от SteveStage Посмотреть сообщение
    А из-за чего это вообще происходит? В конце hex-числа, например, нули не обрезаются.
    Даже десятичное число можно записать с любым количеством нулей в начале и эти нули никак не будут влиять на конечный результат
    1. printf("%d", 0000000100);

    Об этом должны были рассказывать на уроках математики в начальной школе. И как при записи чисел от 0 до 100 ты не дописываешь нули в начало, если число меньше 100, так и в случае с твоим числом, записанным в шестнадцатеричной системе счисления, нули убираются, ибо никакой смысловой нагрузки они не имеют.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #6
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Даже десятичное число можно записать с любым количеством нулей в начале и эти нули никак не будут влиять на конечный результат
    1. printf("%d", 0000000100);

    Об этом должны были рассказывать на уроках математики в начальной школе. И как при записи чисел от 0 до 100 ты не дописываешь нули в начало, если число меньше 100, так и в случае с твоим числом, записанным в шестнадцатеричной системе счисления, нули убираются, ибо никакой смысловой нагрузки они не имеют.
    Я думал, что hex-числа устроены по другому и они принимают любые нули, а отличаются они лишь тем, что в их состав могут входить буквы.

  8. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    "hex-числа" - это самые обыкновенные числа, просто написанные в шестнадцатеричном представлении, а не десятичном. Точно так же число можно выразить и в двоичной, и в трочиной, и в восьмеричной, и в любой другой системе счисления. Хоть в шестидесятеричной, которая используется для представления времени.
    На уроке информатики не рассказывали о системах счисления?

    Шестнадцатеричная система счисления
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #8
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    "hex-числа" - это самые обыкновенные числа, просто написанные в шестнадцатеричном представлении, а не десятичном. Точно так же число можно выразить и в двоичной, и в трочиной, и в восьмеричной, и в любой другой системе счисления. Хоть в шестидесятеричной, которая используется для представления времени.
    На уроке информатики не рассказывали о системах счисления?

    Шестнадцатеричная система счисления
    У нас в школе информатика - дно полнейшее, ничего нового для меня там нету, а систем счислений в школьной программе просто нету=)
    Двоичную систему счисления без объяснений просто пропустили.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •