# Converting numbers to binary form.

### [1/8] from: reboler::programmer::net at: 9-Sep-2002 10:24

Is there an easy way to represent numbers in their binary form?
A work-around for 0 thru 255 is ...
to-binary to-char number
... but what can one do for higher numbers?

### [2/8] from: chris:ross-gill at: 9-Sep-2002 11:57

Hi Alan,

> Is there an easy way to represent numbers in their binary form?
>
> A work-around for 0 thru 255 is ...
>
> to-binary to-char number
>
> ... but what can one do for higher numbers?
>> to-binary to-block 255

== #{FF}
- Chris

### [3/8] from: gscottjones:mchsi at: 9-Sep-2002 10:57

From: "alan parman"

> Is there an easy way to represent numbers in their binary form?
>
> A work-around for 0 thru 255 is ...
>
> to-binary to-char number
>
> ... but what can one do for higher numbers?

Hi, Alan,
Do you mean like the hex representation of the binary form? Perhaps "to-hex"
will help up to a point.

>> to-binary to-char 255

== #{FF}

>> to-hex 255

== #000000FF

>> to-hex 256

== #00000100
--Scott Jones

### [4/8] from: g:santilli:tiscalinet:it at: 9-Sep-2002 21:42

Hi Alan,
On Monday, September 9, 2002, 5:24:57 PM, you wrote:
ap> Is there an easy way to represent numbers in their binary form?
This is the easy way, provided you're on a little-endian platform:

>> s: make struct! [num [integer!]] [0]
>> integer-to-binary: func [i [integer!]] [s/num: i head reverse third s]
>> integer-to-binary 100

== #{00000064}

>> integer-to-binary 100000000

== #{05F5E100}
On big-endian platforms you just don't need to REVERSE it.
A (probably slower, but didn't test it) multiplatform way is:

>> integer-to-binary: func [i [integer!]] [debase/base to-hex i 16]
>> integer-to-binary 100000000

== #{05F5E100}
Regards,
Gabriele.
--
Gabriele Santilli <

**[g--santilli--tiscalinet--it]**> -- REBOL Programmer Amigan -- AGI L'Aquila -- REB: http://web.tiscali.it/rebol/index.r### [5/8] from: reboler:programmer at: 9-Sep-2002 12:53

I want the following...
1 ==> 00000001
2 ==> 00000010
3 ==> 00000011
4 ==> 00000100
...
255 ==> 11111111
256 ==> 100000000
...
1000 ==> 11111010000
1001 ==> 11111010001

### [6/8] from: g:santilli:tiscalinet:it at: 10-Sep-2002 0:42

Hi Alan,
On Monday, September 9, 2002, 7:53:30 PM, you wrote:
ap> I want the following...
[...]
Use one of the two functions I provided earlier, then ENBASE the
result with /BASE 2.
Regards,
Gabriele.
--
Gabriele Santilli <

**[g--santilli--tiscalinet--it]**> -- REBOL Programmer Amigan -- AGI L'Aquila -- REB: http://web.tiscali.it/rebol/index.r### [7/8] from: carl:cybercraft at: 10-Sep-2002 19:38

On 10-Sep-02, alan parman wrote:

> I want the following...
> 1 ==> 00000001

<<quoted lines omitted: 7>>

> 1000 ==> 11111010000
> 1001 ==> 11111010001
Checking on binary in the REBOL guide, the simpliest way to achieve
this seems to be by using enbase and to-binary...

>> to-hex 256

== #00000100

>> enbase/base to-binary [1] 2

== "00000001"

>> enbase/base to-binary [2] 2

== "00000010"

>> enbase/base to-binary [3] 2

== "00000011"

>> enbase/base to-binary [255] 2

== "11111111"
A problem arises when you want to go above 1 byte though, as this
doesn't work...

>> enbase/base to-binary [256] 2

== "00000000"
you having to use two integers in the block to get the desired
results...

>> enbase/base to-binary [1 0] 2

== "0000000100000000"

>> enbase/base to-binary [1 1] 2

== "0000000100000001"

>> enbase/base to-binary [255 255] 2

== "1111111111111111"
A function using that method might be...
base-2: func [n [integer!]][
enbase/base to-binary reduce [to-integer n / 256 n // 256] 2
]
which gives...

>> base-2 0

== "0000000000000000"

>> base-2 1

== "0000000000000001"

>> base-2 2

== "0000000000000010"

>> base-2 3

== "0000000000000011"

>> base-2 255

== "0000000011111111"

>> base-2 256

== "0000000100000000"

>> base-2 257

== "0000000100000001"

>> base-2 65535

== "1111111111111111"
Obviously that's restricted to 16 bits and includes them all in the
string, but the function could be easily altered to suit your
specific needs.
HTH.
--
Carl Read

### [8/8] from: mh983:attbi at: 10-Sep-2002 18:39

Here's a script I copied from pg 232 of REBOL for Dummies (thanks Ralph
Roberts):
The commented print is the original which only prints
the lowest 8 bits, so I just added "print bin" to print the whole
thing:
print-binary: func [a [integer! char!]][
bin:
enbase/base (load rejoin [
"#{" to-hex either char? a [to-integer
a][a] "}"]) 2
; print find/last/any bin "????????" ; last 8 bits
print bin
]
sample output:

>> print-binary

23456110
00000001011001011110100101101110

Notes

- Quoted lines have been omitted from some messages.

View the message alone to see the lines that have been omitted