Re: Convert hex to binary

2015-04-24 Thread Ali Çehreli via Digitalmars-d-learn

On 04/24/2015 11:14 AM, nrgyzer wrote:

Hi,

I'm looking for a function that converts my hex-string to a binary
representation. In Python I write the following:

myHex = 123456789ABCDEF
myBin = myHex.decode('hex')

But how to do the same in D? Is there any function?

Thanks for suggestions!


Here is one way:

import std.stdio;
import std.format;

string hexToBin(string source)
{
ulong value;
formattedRead(source, %x, value);
return format(%b, value);
}

enum string hex = hex;

string decode(string TargetFormat)(string source)
{
static if (TargetFormat == hex) {
return hexToBin(source);

} else {
static assert(false,
  format(I don't know how to decode to '%s',
 TargetFormat));
return ;
}
}

void main()
{
assert(123456789ABCDEF.decode!hex ==
   10010001101000101011000001001101010001100);
}

Ali



Convert hex to binary

2015-04-24 Thread nrgyzer via Digitalmars-d-learn

Hi,

I'm looking for a function that converts my hex-string to a 
binary representation. In Python I write the following:


myHex = 123456789ABCDEF
myBin = myHex.decode('hex')

But how to do the same in D? Is there any function?

Thanks for suggestions!


Re: Convert hex to binary

2015-04-24 Thread Steven Schveighoffer via Digitalmars-d-learn

On 4/24/15 2:14 PM, nrgyzer wrote:

Hi,

I'm looking for a function that converts my hex-string to a binary
representation. In Python I write the following:

myHex = 123456789ABCDEF
myBin = myHex.decode('hex')

But how to do the same in D? Is there any function?

Thanks for suggestions!


import std.conv : parse;
import std.stdio;

void main()
{
auto myHex = 123456789ABCDEF;
auto myBin = parse!ulong(myHex, 16);
writeln(myBin); // 81985529216486895
}

Note, python may make arbitrary long integers, but D you must specify 
the size for your integer to the parse function. In this case, you need 
ulong which is 64 bits.


-Steve



Re: Convert hex to binary

2015-04-24 Thread nrgyzer via Digitalmars-d-learn

On Friday, 24 April 2015 at 18:45:55 UTC, Jesse Phillips wrote:

On Friday, 24 April 2015 at 18:14:07 UTC, nrgyzer wrote:

Hi,

I'm looking for a function that converts my hex-string to a 
binary representation. In Python I write the following:


myHex = 123456789ABCDEF
myBin = myHex.decode('hex')

But how to do the same in D? Is there any function?

Thanks for suggestions!


import std.stdio;
void main(){
import std.conv;
import std.format;

auto i = to!ulong(123456789ABCDEF, 16);

writeln(format(%b, i));
}


Thanks to all of you for the solutions, but what if the 
hex-string exceeds the limit of ulong, for instance 
123456789ABCDEF0123456789ABCDEF1234. How to convert them to a 
ulong-array?


Re: Convert hex to binary

2015-04-24 Thread Ivan Kazmenko via Digitalmars-d-learn
On Friday, 24 April 2015 at 18:55:07 UTC, Steven Schveighoffer 
wrote:
Thanks to all of you for the solutions, but what if the 
hex-string

exceeds the limit of ulong, for instance
123456789ABCDEF0123456789ABCDEF1234. How to convert them to a
ulong-array?


Well, technically, a hex string can be split on 16-character 
boundaries, and then you could parse each one.


-Steve


BigInt can be constructed from a decimal string:

-
import std.bigint, std.conv, std.stdio, std.string;
void main(){readln.strip.to!BigInt.writeln;}
-

The same could have been done in the library for function to 
accepting the second argument, like this:


-
import std.bigint, std.conv, std.stdio, std.string;
void main(){readln.strip.to!BigInt(16).writeln;}
-

It seems trivial technically, but I wonder if there's some 
library design drawback.  After all, to!BigInt from the default 
base 10 is the same O(n^2) as to!BigInt from a variable base, so 
it's not like the function is going to hide complexity more than 
it already does.


Ivan Kazmenko.


Re: Convert hex to binary

2015-04-24 Thread Rene Zwanenburg via Digitalmars-d-learn

On Friday, 24 April 2015 at 19:15:04 UTC, Ivan Kazmenko wrote:
On Friday, 24 April 2015 at 18:55:07 UTC, Steven Schveighoffer 
wrote:
Thanks to all of you for the solutions, but what if the 
hex-string

exceeds the limit of ulong, for instance
123456789ABCDEF0123456789ABCDEF1234. How to convert them to 
a

ulong-array?


Well, technically, a hex string can be split on 16-character 
boundaries, and then you could parse each one.


-Steve


BigInt can be constructed from a decimal string:

-
import std.bigint, std.conv, std.stdio, std.string;
void main(){readln.strip.to!BigInt.writeln;}
-

The same could have been done in the library for function to 
accepting the second argument, like this:


-
import std.bigint, std.conv, std.stdio, std.string;
void main(){readln.strip.to!BigInt(16).writeln;}
-

It seems trivial technically, but I wonder if there's some 
library design drawback.  After all, to!BigInt from the default 
base 10 is the same O(n^2) as to!BigInt from a variable base, 
so it's not like the function is going to hide complexity more 
than it already does.


Ivan Kazmenko.


ATM BigInt already supports hex strings; it looks for a 0x 
prefix. A radix parameter would be nice, but this works today ;)


Re: Convert hex to binary

2015-04-24 Thread Rene Zwanenburg via Digitalmars-d-learn
On Friday, 24 April 2015 at 18:55:07 UTC, Steven Schveighoffer 
wrote:

On 4/24/15 2:50 PM, nrgyzer wrote:

On Friday, 24 April 2015 at 18:45:55 UTC, Jesse Phillips wrote:

On Friday, 24 April 2015 at 18:14:07 UTC, nrgyzer wrote:

Hi,

I'm looking for a function that converts my hex-string to a 
binary

representation. In Python I write the following:

myHex = 123456789ABCDEF
myBin = myHex.decode('hex')

But how to do the same in D? Is there any function?

Thanks for suggestions!


   import std.stdio;
   void main(){
   import std.conv;
   import std.format;

   auto i = to!ulong(123456789ABCDEF, 16);

   writeln(format(%b, i));
   }


Thanks to all of you for the solutions, but what if the 
hex-string

exceeds the limit of ulong, for instance
123456789ABCDEF0123456789ABCDEF1234. How to convert them to a
ulong-array?


Well, technically, a hex string can be split on 16-character 
boundaries, and then you could parse each one.


-Steve


Or use BigInt:

http://dlang.org/phobos/std_bigint.html


Re: Convert hex to binary

2015-04-24 Thread Jesse Phillips via Digitalmars-d-learn

On Friday, 24 April 2015 at 18:14:07 UTC, nrgyzer wrote:

Hi,

I'm looking for a function that converts my hex-string to a 
binary representation. In Python I write the following:


myHex = 123456789ABCDEF
myBin = myHex.decode('hex')

But how to do the same in D? Is there any function?

Thanks for suggestions!


import std.stdio;
void main(){
import std.conv;
import std.format;

auto i = to!ulong(123456789ABCDEF, 16);

writeln(format(%b, i));
}


Re: Convert hex to binary

2015-04-24 Thread Steven Schveighoffer via Digitalmars-d-learn

On 4/24/15 2:50 PM, nrgyzer wrote:

On Friday, 24 April 2015 at 18:45:55 UTC, Jesse Phillips wrote:

On Friday, 24 April 2015 at 18:14:07 UTC, nrgyzer wrote:

Hi,

I'm looking for a function that converts my hex-string to a binary
representation. In Python I write the following:

myHex = 123456789ABCDEF
myBin = myHex.decode('hex')

But how to do the same in D? Is there any function?

Thanks for suggestions!


import std.stdio;
void main(){
import std.conv;
import std.format;

auto i = to!ulong(123456789ABCDEF, 16);

writeln(format(%b, i));
}


Thanks to all of you for the solutions, but what if the hex-string
exceeds the limit of ulong, for instance
123456789ABCDEF0123456789ABCDEF1234. How to convert them to a
ulong-array?


Well, technically, a hex string can be split on 16-character boundaries, 
and then you could parse each one.


-Steve