MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

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&#39;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


  • Prev by Date: Re: A little C program calling MathLink
  • Next by Date: Re: Kernel crashes in ReplaceAll - with or without Maximize failure
  • Previous by thread: how to read in a number in hex and convert it to binary
  • Next by thread: Re: how to read in a number in hex and convert it to binary