I love this list.  Excellent feedback.  Your function is very small and
efficient. Very nice.

Paul Tretter

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Sent: Saturday, August 26, 2000 4:57 AM
To: [EMAIL PROTECTED]
Subject: [REBOL] Re:Binary to Decimal Function



Hi Paul,

You should copy the argument before you reverse it, since reverse will
change the original data:

>> a: "1000"
== "1000"
>> bnfunc a
== 8
>> a
== "0001"

Instead of

  reverse bn

you could say

  reverse bn: copy bn

Also, an easier way to do

  if (to-string (pick bn x)) = "1" [ ... ]

is

  if ((pick bn x)) = #"1" [ ... ]


Here's another way to do the whole thing:

from-bin: func [
    {convert a binary string representation into a numeric value}
    b [string!]
    /local x
][
    x: 0.0
    foreach bit b [
        x: x * 2 + either #"1" = bit [1][0]
    ]
    x
]


Eric

=====================

        Here is a useful function for anyone needing to convert binary digits to
decimal.  Took me awhile but here it is:

bnfunc:  func [
    "Convert Binary digits to Decimal equivalent"
    bn [string!] "The binary representation"
    /local holder count][
    holder: make integer! 0
    reverse bn
    count: length? bn
    for x 1 count 1 [
        if (to-string (pick bn x)) = "1" [
            holder: (2 ** (x - 1)) + holder
        ]
    ]
return holder

]

Let me know what you think.

I am gonna create some refinements to enhance it a bit.

Paul Tretter

Reply via email to