Re: how to read in a number in hex and convert it to
- To: mathgroup at smc.vnet.net
- Subject: [mg105211] Re: [mg105176] how to read in a number in hex and convert it to
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Tue, 24 Nov 2009 05:50:36 -0500 (EST)
- References: <200911231153.GAA22070@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
You can't fit 256 hex digits into 27 binary digits, but other than that...
Here's an example. First I'll create a much smaller "hello.txt" file... 30
numbers, each with exactly 5 hex digits:
str = OpenWrite["hello.txt"];
Scan[WriteString[str, # <> "\n"] &,
IntegerString[RandomInteger[{16^4, 16^5 - 1}, 30], 16]]
Close[str];
Next, I'll read in the data as a list of strings:
str = OpenRead["hello.txt"];
strings = ReadList[str, String];
Close[str];
strings
{"21938", "7dc12", "beaa2", "b96c6", "d3975", "6eb8f", "71ab8", \
"dadea", "2f74a", "db7dd", "40d67", "88802", "21f47", "8afdb", \
"41202", "21a69", "f1db6", "b2032", "c2cea", "dfd08", "5d977", \
"3a45c", "98845", "4c00c", "defb3", "c9889", "dc69a", "b0dbb", \
"7d803", "c9c3a"}
These will all fit into 20 binary bits, but I'll pad them to 21 just for
fun.
(binaries =
IntegerDigits[FromDigits[#, 16], 2, 21] & /@ strings) // Column
{0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,1,1,0,0,0}
{0,0,1,1,1,1,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0}
{0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0}
{0,1,0,1,1,1,0,0,1,0,1,1,0,1,1,0,0,0,1,1,0}
{0,1,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1}
{0,0,1,1,0,1,1,1,0,1,0,1,1,1,0,0,0,1,1,1,1}
{0,0,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0,0,0}
{0,1,1,0,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0}
{0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,0}
{0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,0,1}
{0,0,1,0,0,0,0,0,0,1,1,0,1,0,1,1,0,0,1,1,1}
{0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0}
{0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,1}
{0,1,0,0,0,1,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1}
{0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0}
{0,0,0,1,0,0,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1}
{0,1,1,1,1,0,0,0,1,1,1,0,1,1,0,1,1,0,1,1,0}
{0,1,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1,0}
{0,1,1,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0}
{0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,0,0}
{0,0,1,0,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,1,1}
{0,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,0}
{0,1,0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1}
{0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0}
{0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,1}
{0,1,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,1}
{0,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,0}
{0,1,0,1,1,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1}
{0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1}
{0,1,1,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,1,0}
I hope that helps.
Bobby
On Mon, 23 Nov 2009 05:53:11 -0600, Michael O'Hanrahan
<hanrahan398 at yahoo.co.uk> wrote:
> Hi, newbie question I'm afraid, but I couldn't work out how to do this
> from the help. I'm using Mathematica 5.2.
>
> I've got a textfile containing about 30 thousand 256-digit numbers in
> hex. I need to read them in and work on them one by one. Reading them is
> fine using
>
> Read["hello.txt",Expression]
>
> Then I would like to turn each number into a fixed-length binary number,
> using something like
>
> IntegerDigits[16^^p, 2, 27]
>
> The problem is, this doesn't work. The argument of ^^ seems to need to
> be an actual number in hex, e.g. 16^A12B3, rather than a variable.
>
> Given that essentially ^^ is a two-argument function, is there a way to
> express it as such in Mathematica?
>
> I'm even having trouble getting the input to be accepted as a number at
> all . Replacing "Expression" (or "String") with "Number" or "Integer"
> doesn't work.
>
> Will be grateful for any help with this.
> Thanks!
> Michael
>
--
DrMajorBob at yahoo.com
- References:
- how to read in a number in hex and convert it to binary
- From: "Michael O'Hanrahan" <hanrahan398@yahoo.co.uk>
- how to read in a number in hex and convert it to binary