Anonymous user
Non-decimal radices/Convert: Difference between revisions
Updated D entries
(Updated D entries) |
|||
Line 523:
=={{header|D}}==
===Using Standard Functions===
<lang d>import std.stdio, std.conv, std.string, std.ascii;
void main() {
"1abcd".to!int(16).writeln
591_458.to!string(36, LetterCase.lower)
}</lang>
{{out}}
<pre>109517
rosetta code</pre>
===One Implementation===
<lang d>import std.stdio, std.array, std.ascii;
ulong atoiRadix(in string str, in
nothrow {
static int dtoi(in char dc, in
static int[immutable char] digit;
immutable char d =
if (digit.length == 0) //
foreach (i, c; mDigits)
digit[c] = i;
Line 549 ⟶ 551:
d in digit && digit[d] < radix)
return digit[d];
return int.min; //
}
Line 556 ⟶ 558:
for (; sp < str.length; sp++) {
immutable int d = dtoi(str[sp], radix);
if (d >= 0) //
result = radix * result + d;
else
break;
}
if (sp != str.length) //
sp = -sp;
if (consumed !is null) //
*consumed = sp;
return result;
}
string itoaRadix(ulong num, in
in {
assert(radix > 1 && radix <= mDigits.length);
Line 574 ⟶ 576:
string result;
while (num > 0) {
result = mDigits[d] ~ result;
num = (num - d) / radix;
Line 600 ⟶ 601:
<pre>'1ABcdxyz???' (base 16) = 109517 Converted only: '1ABcd'
rosetta code</pre>
===Alternative Implementation===
{{trans|Haskell}}
<lang d>import std.stdio
alias Digits = ubyte[];
Line 616 ⟶ 617:
}
digits.map!(d => myDigits[d]).array;
static ubyte convert(in dchar d) pure nothrow {▼
cast(ubyte)(d.isDigit ? d -
enum toDigits = (in
number.map!convert.array;
void main() {
|