Difference between revisions of "BinaryDecimalConverter"

From Second Life Wiki
Jump to navigation Jump to search
(shorter decToBin)
m (<lsl> tag to <source>)
 
Line 1: Line 1:
{{LSL Header}}
{{LSL Header}}
The next function converts a binary value to a decimal number. Works +/- 5 times faster than [[Base2Dec]] :
The next function converts a binary value to a decimal number. Works +/- 5 times faster than [[Base2Dec]] :
<lsl>integer binToDec(string val)
<source lang="lsl2">integer binToDec(string val)
{
{
     integer dec = 0;
     integer dec = 0;
Line 8: Line 8:
         dec = (dec << 1) + (integer)llGetSubString(val, i, i);
         dec = (dec << 1) + (integer)llGetSubString(val, i, i);
     return dec;
     return dec;
}</lsl>
}</source>


This one converts a decimal to a binary value:
This one converts a decimal to a binary value:


<lsl>string decToBin(integer val)
<source lang="lsl2">string decToBin(integer val)
{
{
     string binary = (string)(val & 1);
     string binary = (string)(val & 1);
Line 23: Line 23:
     }
     }
     return binary;
     return binary;
}</lsl>
}</source>


Greets from Soundless :)
Greets from Soundless :)
Line 29: Line 29:
This version of decToBin doesn't crash on negatives, is shorter source code and about 50 bytes shorter in Mono bytecode than the original, but sadly about 50% slower. << and >> are expensive on bytecode.
This version of decToBin doesn't crash on negatives, is shorter source code and about 50 bytes shorter in Mono bytecode than the original, but sadly about 50% slower. << and >> are expensive on bytecode.


<lsl>
<source lang="lsl2">
string decToBin(integer val)
string decToBin(integer val)
{
{
Line 38: Line 38:
     return binary;
     return binary;
}
}
</lsl>
</source>
((Omei))
((Omei))

Latest revision as of 18:27, 24 January 2015

The next function converts a binary value to a decimal number. Works +/- 5 times faster than Base2Dec :

integer binToDec(string val)
{
    integer dec = 0;
    integer i = ~llStringLength(val);
    while(++i)
        dec = (dec << 1) + (integer)llGetSubString(val, i, i);
    return dec;
}

This one converts a decimal to a binary value:

string decToBin(integer val)
{
    string binary = (string)(val & 1);
    for(val = ((val >> 1) & 0x7FFFffff); val; val = (val >> 1))
    {
        if (val & 1)
            binary = "1" + binary;
        else
            binary = "0" + binary;
    }
    return binary;
}

Greets from Soundless :)

This version of decToBin doesn't crash on negatives, is shorter source code and about 50 bytes shorter in Mono bytecode than the original, but sadly about 50% slower. << and >> are expensive on bytecode.

string decToBin(integer val)
{
    string binary;
    do
        binary = (string) (val & 1) + binary;
    while (val /= 2);
    return binary;
}

((Omei))