more OO way to do hex string to bytes conversion

ag0aep6g anonymous at example.com
Tue Feb 6 18:57:55 UTC 2018


On 02/06/2018 07:33 PM, Ralph Doncaster wrote:
> I've been reading std.conv and std.range, trying to figure out a 
> high-level way of converting a hex string to bytes.  The only way I've 
> been able to do it is through pointer access:
> 
> import std.stdio;
> import std.string;
> import std.conv;
> 
> void main()
> {
>      immutable char* hex = "deadbeef".toStringz;
>      for (auto i=0; hex[i]; i += 2)
>          writeln(to!byte(hex[i]));
> }
> 
> 
> While it works, I'm wondering if there is a more object-oriented way of 
> doing it in D.

I don't think that works as you intend. Your code is taking the numeric 
value of every other character.

But you want 0xDE, 0xAD, 0xBE, 0xEF, no? Here's one way to do that, but 
I don't think it qualifies as object oriented (but I'm also not sure how 
an object oriented solution is supposed to look):

----
void main()
{
     import std.algorithm: map;
     import std.conv: to;
     import std.range: chunks;
     import std.stdio;
     foreach (b; "deadbeef".chunks(2).map!(chars => chars.to!ubyte(16)))
     {
         writefln("%2X", b);
     }
}
----


More information about the Digitalmars-d-learn mailing list