Выражения Tcl с шестнадцатеричными числами? - PullRequest
5 голосов
/ 01 февраля 2012

Функция Tcl expr поддерживает аргументы, записанные в шестнадцатеричной записи: операнды, начинающиеся с 0x, обрабатываются как целые числа, записанные в шестнадцатеричной форме.

Однако возвращаемое значение expr всегда в десятичном видеформа: expr 0xA + 0xA возвращает 20, а не 0x14.

Есть ли способ сказать expr, чтобы вернуть шестнадцатеричное представление?Есть ли функция Tcl, которая преобразует десятичное представление в шестнадцатеричное?

Ответы [ 2 ]

9 голосов
/ 01 февраля 2012

Команда format - это то, что вам нужно:

format 0x%x [expr {0xa + 0xa}]  ;# ==> 0x14
5 голосов
/ 01 февраля 2012

Я бы хотел уточнить пост Гленна, чтобы прояснить ситуацию с Ваагном.

expr не возвращает свой результат в том или ином представлении, вместо этого он возвращает значение в некотором подходящем внутреннем формате (целое число, большое целое число, значение с плавающей запятой и т. Д.). При тестировании вы видите только интерпретатор Tcl, который преобразует то, что expr вернуло в соответствующую текстовую форму, используя преобразование по умолчанию в строку, которая для целых чисел, естественно, использует базу 10.

Это преобразование происходит в вашем случае исключительно потому, что вы хотели отобразить значение, возвращаемое expr, и отображение (любых) значений естественным образом приводит к их преобразованию в строки, если они «напечатаны» - на терминал, к окну tkcon и т. д.

Используя format, вы применяете любое желаемое строковое представление вместо стандартного. Поскольку format уже возвращает значение, которое является строкой внутри, преобразование не выполняется при печати. ​​

...