Что делает «hex» или «oct» в Perl, когда вы передаете шестнадцатеричный или восьмеричный литерал (вместо его строкового выражения)? - PullRequest
0 голосов
/ 03 декабря 2018

Например, при выполнении

print hex("0x1234"), "\n";  # line1: Equivalent to hex("1234") or hex(1234)
print hex(0x1234), "\n";    # line2: What does this line do?
print hex(4660), "\n";      # line3: Equivalent to hex('4660') or hex('0x4660')

Приведенный выше код выдаст:

4660
18016
18016

Таким образом, строка2 эквивалентна строке3.Я поставил 4460 в строке 3 вместо 4660, чтобы вызвать замешательство.Спасибо всем ответам, которые исправили мою первоначальную ошибку.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

hex и oct принимают строки в качестве операндов.Если вы дадите им номер, номер сначала преобразуется в строку.print () делает то же самое.Если вы говорите:

print 0x1234

, он берет число (4660), преобразует его в строку ("4660") и печатает его.

Аналогично, с:

hex(0x1234)

hex берет число (4660), преобразует его в строку ("4660"), затем интерпретирует его как шестнадцатеричное и возвращает это число (0x4660 = 18016).Когда вы печатаете это, вы получаете «18016».

0 голосов
/ 03 декабря 2018

Учтите:

$ perl -E "say 0x1234"
4660
$ perl -E "say 0x4660"
18016

4660 в базе 10 - это то же число, что и 1234 в базе 16. 18016 в базе 10 - это то же самое, что 4660 в базе 16.

первая строка преобразует число base-16 в строке "0x1234" в число.

Ваша вторая строка превращает число 0x1234 / 4660 в строку "4660" и преобразует это число base-16.

Ваш третий использует 4460 вместо 4660, что, как я подозреваю, является опечаткой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...