Blockland Forums > Modification Help

Convert between characters and character indexes (Small Coding Resource)

Pages: << < (2/2)

Space Guy:

Why is the loop necessary in the second one? I had something like these which I haven't used much yet:


--- Code: --- function base10toHex(%num)
{
  %s = "0123456789ABCDEF";
  %num = mFloor(%num);
  return getSubStr(%s,(%num - (%num % 16)) / 16,1) @ getSubStr(%s,(%num % 16),1);
}

function numToChar(%x)
{
  %num = base10toHex(%x);
  eval("%char = \"\\x" @ %num @ "\";");
  return %char;
}
--- End code ---

I didn't know that collapseEscape existed for this purpose, so this looks like it'd be shorter:

--- Code: --- function numToChar(%x)
{
  %num = base10toHex(%x);
  %char = collapseEscape("\\x" @ %num);
  return %char;
}
--- End code ---

My solution for the first one was just a few large switch statements (case "\x51": return 81; works with input charToNum("Q")) so whether that's faster than the loop or not I don't know. Incidentally a switch statement errors after about 83 cases and doesn't work.

They should both test for 16*%x + %y otherwise it's getting most of the cases wrong.

Kalphiter:

I had this from 2 years ago, and I chose the name "chr" because that's the equivalent in PHP.


--- Code: ---function dec2hex(%val) 
{
    %digits ="0123456789ABCDEF";
    %firstDigit = getSubStr(%digits, mFloor(%val/16), 1);
    %secDigit = getSubStr(%digits, %val % 16, 1);   
    return %firstDigit @ %secDigit; 
}

function chr(%num)
{
    %rand = getRandom();
    eval("$chrString["@ %rand @"] = \"\\x"@ dec2hex(%num) @"\";");
    %return = $chrString[%rand];
    $chrString[%rand] = "";
    return %return;
}
--- End code ---
The %rand is just for a random string to retrieve later, it could be made more efficient.
For example, when you convert a number to a character, you can store the number in an array with character as the index, so that you don't have to loop through everything again.

Pages: << < (2/2)

Go to full version