I want to convert a hexadecimal string to a decimal (base 10) number:
16^^ff
16^^ToExpression["ff"]
The 1st line returns the correct answer of 255, while the 2nd line gives an error. Why doesn't it work?
I want to convert a hexadecimal string to a decimal (base 10) number:
16^^ff
16^^ToExpression["ff"]
The 1st line returns the correct answer of 255, while the 2nd line gives an error. Why doesn't it work?
As already stated in the comments the ^^ notation is handled in parsing; observe:
HoldComplete[16^^ff] // FullForm
HoldComplete[255]
(I intend this to illustrate that this notation is "evaluated" before the main evaluator ever sees it.)
This parsing is really no different from other numerical notation in Mathematica, for example 12.345 is directly parsed as a Real number, not an expression involving Dot. Likewise 1*^6 is parsed as the Integer one million, with no relation to Times or Power.
As Simon Woods recommended, for programmatic input of hexadecimals use FromDigits:
FromDigits["ff", 16]
255
^^corresponds toBaseForm, although I grant you that this is referenced in theBaseFormdocumentation. It is just another notation for entering numbers, like1*^10. These particular notations are processed by the parser, are not interpreted as functions, and require that numeric literals appear both on the left and the right. It doesn't work sinceToExpression["ff"]is not a numeric literal. You may use e.g.ToExpression@ToString@StringForm["16^^``", "ff"]instead. – Oleksandr R. Feb 02 '14 at 18:09Accuracy[1.2``20]– DavidC Feb 02 '14 at 18:21StringForm's syntax... The second argument toStringFormgets inserted where ever there's a double backtick. If you have more than one argument to insert, you can indicate the order with a number, like `1`. – rm -rf Feb 02 '14 at 18:28ToExpressionbut FYI the usual method to interpret a hexadecimal string is withFromDigits, e.g.FromDigits["FF", 16]gives 255 – Simon Woods Feb 02 '14 at 20:5616^^ffis interpreted as parse time. It doesn't go like input -> compound expression -> evaluation. It is directly parsed into an atomic integer.16^ffis just a different way to write the atomic255, there's no difference between the two inputs from Mathematica's point of view. You might have been under the impression that^^is an operator that might correspond to some head, so you can join two arbitrary expressions using this operator. This is not the case.^^is not an operator in Mathematica, it's just part of the syntax for writing numbers ... – Szabolcs Feb 03 '14 at 01:41*^, which can also be used in inputting numbers. – Szabolcs Feb 03 '14 at 01:44