Converting string to ascii value

Nick Sabalausky SeeWebsiteToContactMe at semitwist.com
Fri Mar 7 14:54:00 PST 2014


On 3/7/2014 5:21 PM, Setra wrote:
> Hello all! I am having trouble converting a letter in a array of string
> to the ascii value. For example:
>

First of all:

> string[] stringarray[3];

This isn't your main problem, but that line is incorrect. Actually, I'm 
kinda surprised that even works. It should be one of these, depending if 
you want a static array or a dynamic one:

string[3] staticStringArray;

string[] dynamicStringArray;
dynamicStringArray.length = 3;

Or you can do it all in one like this:

string[] dynamicStringArray = ["blahblahblah", "a", "5"];

> stringarray[0] = "blahblahblah";
> stringarray[1] = "a";
> stringarray[3] = "5";
>
> long y = to!long(stringarray[2]); // makes y the value 5
> long x = to!long(stringarray[1]); // errors
>
>
> This is not working properly. I want to get the ascii value of the
> characters.
> In this case y should equal 97, b should equal 53. How do I do this
> properly?
> Thanks!

First of all, ASCII is outdated, it's all Unicode now. D's strings are 
UTF-8. See this if you need a primer on Unicode:

http://www.joelonsoftware.com/articles/Unicode.html

That said, the English letters and numeric digits just happen to be the 
same in UTF-8 as ASCII, so in your examples, you can still get the ASCII 
values (as long as you remember it's *really* Unicode's UTF-8). Just 
keep in mind you don't normally want to be dealing with ASCII or even 
individual characters. Usually you want to just stick with with full 
strings.

Back to your code though, your code is trying to convert the *entire* 
string to a long. So that's not going to get you want you want. You want 
the numeric representation of an *individual* character *within* the 
string. In your example, you'd do that like this:

char c2 = stringarray[2][0]; // First 'char' in string #2: '5'
char c1 = stringarray[1][0]; // First 'char' in string #1: 'a'

Again, remember those aren't really characters, they're UTF-8 "code 
units". So if your strings have any non-english characters, then that 
won't always work as you expect.

Now, to get the numeric representation of c1 and c2 (ie the UTF-8 code 
unit, which in your example just happens to also be the ASCII code, but 
only by pure chance), you can just cast it to a ubyte:

ubyte y = cast(ubyte)c2;
ubyte x = cast(ubyte)c1;



More information about the Digitalmars-d-learn mailing list