Hex
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Function: string hex(integer value);
Returns the hexadecimal nybbles of the signed integer value, in order, prefixed by "0x" or by "-0x", without any leading zeroes.
Parameters:
| • integer | value | – | value to be converted |
This function works like the hex function of the Python scripting language, doc'ed within http://docs.python.org/lib/built-in-funcs.html. Specifically, this function returns a signed 31-bit result if negative, rather than a 32-bit result. and this function returns the easier-to-type lower case nybbles a la AT&T, rather than the easier-to-read upper case nybbles a la IBM.
Implementation
// http://wiki.secondlife.com/wiki/Hex
string HEXC = "0123456789ABCDEF";
string hexu(integer value)
{
integer ny = (value & 0xF);
string nybbles = llGetSubString(HEXC, ny, ny);
value = (0xfffFFFF & (value >> 4));
if (value)
{
do
{
ny = (value & 0xF);
nybbles = llGetSubString(HEXC, ny, ny) + nybbles;
value = (value >> 4);
} while (value);
}
return "0x" + nybbles;
}
string hex(integer value)
{
if (value == (1 << 31)) return "-0x80000000";
if (value < 0) return "-" + hex(-value);
return llToLower(hexu(value));
}
Demo
Print the most astonishing test cases and then also the permission masks of a script.
Code:
default
{
state_entry()
{
llOwnerSay("Hello");
llOwnerSay(hex(0));
llOwnerSay(hex(0x00FEDC00 & -0x00FEDC00));
llOwnerSay(hex(1 << 30));
llOwnerSay(hex(1 << 31));
llOwnerSay(hex(0xFEDC9876));
llOwnerSay(hex(-1));
llOwnerSay("OK");
llOwnerSay("Hello again");
string item = llGetScriptName();
llOwnerSay(hex(llGetInventoryPermMask(item, MASK_BASE)));
llOwnerSay(hex(llGetInventoryPermMask(item, MASK_OWNER)));
llOwnerSay(hex(llGetInventoryPermMask(item, MASK_GROUP)));
llOwnerSay(hex(llGetInventoryPermMask(item, MASK_EVERYONE)));
llOwnerSay(hex(llGetInventoryPermMask(item, MASK_NEXT)));
llOwnerSay((string) llGetInventoryPermMask(item, MASK_NEXT));
llOwnerSay("OK");
}
}
Sample results:
Hello 0x0 0x400 0x40000000 -0x80000000 -0x123678a -0x1 OK Hello again 0x7fffffff 0x7fffffff 0x0 0x0 0x82000 532480 OK