On Wednesday, 1 January 2014 at 06:21:05 UTC, Caeadas wrote:
I hope you'll forgive my asking an overly easy question: I've
been searching for an answer and having trouble finding one, and
am getting frustrated.
My issue is this: I'm trying to convert character types to
integers using to!int from std.conv, and I'm getting, for
example, '0'->48, '1'->49, etc. It seems like there should be a
simple way around this, but it's eluding me.
Your code is working correctly. D's chars, for all values up to
255, are the same as the ASCII character set. If you look in the
ASCII table here: http://www.asciitable.com/ you will see that
'0' corresponds to 48, and '1' corresponds to 49. The easiest
solution that will fix your code is change to!int('0') and
to!int('1') to to!int("0") and to!int("1"). It seems that for
characters the to! function just returns its ASCII value, but it
will definitely do what you want for strings. Strangely enough,
it doesn't seem like there's a function to do convert a character
to its numeric value in Phobos, but it's simple to implement.
int charToInt(char c)
{
return (c >= 48 && c <= 57) ? cast(int)(c - 48) : -1;
}
void main()
{
assert(charToInt('0') == 0);
assert(charToInt('1') == 1);
assert(charToInt('9') == 9);
assert(charToInt('/') == -1);
assert(charToInt(':') == -1);
}