PDA

Просмотр полной версии : [Вопрос] Некорректный вывод hex-значений



SteveStage
07.09.2020, 23:58
Вот пример кода:

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

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

C135B

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

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

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

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

{BC157}I am evil!

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

Daniel_Cortez
08.09.2020, 00:29
wiki:Форматирование строк (https://wiki.pro-pawn.ru/wiki/%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D0%BE%D0%BA)
См. пункты "Длина" и "Флаги".
Пример:
printf("%08x", 0xABCDEF); // "00ABCDEF"

SteveStage
08.09.2020, 15:29
А из-за чего это вообще происходит? В конце hex-числа, например, нули не обрезаются.

Daniel_Cortez
08.09.2020, 15:47
А из-за чего это вообще происходит? В конце hex-числа, например, нули не обрезаются.
По той же причине, почему они не обрезаются и в конце "обыкновенных" десятичных чисел: это значимая часть числа, в отличие от нулей слева.

DeimoS
09.09.2020, 12:34
А из-за чего это вообще происходит? В конце hex-числа, например, нули не обрезаются.

Даже десятичное число можно записать с любым количеством нулей в начале и эти нули никак не будут влиять на конечный результат
printf("%d", 0000000100);
Об этом должны были рассказывать на уроках математики в начальной школе. И как при записи чисел от 0 до 100 ты не дописываешь нули в начало, если число меньше 100, так и в случае с твоим числом, записанным в шестнадцатеричной системе счисления, нули убираются, ибо никакой смысловой нагрузки они не имеют.

SteveStage
09.09.2020, 17:54
Даже десятичное число можно записать с любым количеством нулей в начале и эти нули никак не будут влиять на конечный результат
printf("%d", 0000000100);
Об этом должны были рассказывать на уроках математики в начальной школе. И как при записи чисел от 0 до 100 ты не дописываешь нули в начало, если число меньше 100, так и в случае с твоим числом, записанным в шестнадцатеричной системе счисления, нули убираются, ибо никакой смысловой нагрузки они не имеют.

Я думал, что hex-числа устроены по другому и они принимают любые нули, а отличаются они лишь тем, что в их состав могут входить буквы.

DeimoS
10.09.2020, 07:09
"hex-числа" - это самые обыкновенные числа, просто написанные в шестнадцатеричном представлении, а не десятичном. Точно так же число можно выразить и в двоичной, и в трочиной, и в восьмеричной, и в любой другой системе счисления. Хоть в шестидесятеричной, которая используется для представления времени.
На уроке информатики не рассказывали о системах счисления?

Шестнадцатеричная система счисления (https://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D0%B4%D1%86%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F#:~:text=%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D0%B4%D1%80%D1%83%D0%B3%D1%83%D1%8E-,%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%20%D1%87%D0%B8%D1%81%D0%B5%D0%BB%20%D0%B8%D0%B7%20%D1%88%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D0%B4%D1%86%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B9%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B%20%D0%B2%20%D0%B4%D0%B5%D1%81%D1%8F%D1%82%D0%B8%D1%87%D0%BD%D1%83%D1%8E,%D1%86%D0%B8%D1%84%D1%80%D1%8B%20%D0%B2%20%D1%80%D0%B0%D0%B7%D1%80%D1%8F%D0%B4%D0%B0%D1%85%20%D1%88%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D0%B4%D1%86%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0.)

SteveStage
10.09.2020, 17:26
"hex-числа" - это самые обыкновенные числа, просто написанные в шестнадцатеричном представлении, а не десятичном. Точно так же число можно выразить и в двоичной, и в трочиной, и в восьмеричной, и в любой другой системе счисления. Хоть в шестидесятеричной, которая используется для представления времени.
На уроке информатики не рассказывали о системах счисления?

Шестнадцатеричная система счисления (https://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D0%B4%D1%86%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F#:~:text=%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D0%B4%D1%80%D1%83%D0%B3%D1%83%D1%8E-,%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%20%D1%87%D0%B8%D1%81%D0%B5%D0%BB%20%D0%B8%D0%B7%20%D1%88%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D0%B4%D1%86%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B9%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B%20%D0%B2%20%D0%B4%D0%B5%D1%81%D1%8F%D1%82%D0%B8%D1%87%D0%BD%D1%83%D1%8E,%D1%86%D0%B8%D1%84%D1%80%D1%8B%20%D0%B2%20%D1%80%D0%B0%D0%B7%D1%80%D1%8F%D0%B4%D0%B0%D1%85%20%D1%88%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D0%B4%D1%86%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0.)

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