These two functions allow conversion between a string of any charset (like
hexadecimal, octal, etc.) and
integer. Simply adjust the charset variables to change your charset. You could even do something like an octal system that uses the letters A-H instead of 0-7.
string charset = "0123456789abcdef";
integer chr2int(string chr) { // convert unsigned charset to integer
integer base = llStringLength(charset);
integer i = -llStringLength(chr);
integer j = 0;
while(i)
j = (j * base) + llSubStringIndex(charset, llGetSubString(chr, i, i++));
return j;
}
string int2chr(integer int) { // convert integer to unsigned charset
integer base = llStringLength(charset);
string out;
integer j;
if(int < 0) {
j = ((0x7FFFFFFF & int) % base) - (0x80000000 % base);
integer k = j % base;
int = (j / base) + ((0x7FFFFFFF & int) / base) - (0x80000000 / base);
out = llGetSubString(charset, k, k);
}
do
out = llGetSubString(charset, j = int % base, j) + out;
while(int /= base);
return out;
}
default {
state_entry() {
integer a = 0x80000000;
string hex = int2chr(a);
llOwnerSay( llList2CSV([a, hex, chr2int(hex)]));
}
}
Examples