User:Strife Onizuka/hexchars: Difference between revisions

From Second Life Wiki
Jump to navigation Jump to search
Strife Onizuka (talk | contribs)
Created page with 'A quick and dirty function for calculating the number of characters needed to represent an integer in hex (assuming the unsigned notation). The only difference between this and l...'
 
(No difference)

Latest revision as of 17:49, 8 November 2009

A quick and dirty function for calculating the number of characters needed to represent an integer in hex (assuming the unsigned notation). The only difference between this and llCeil(log16(a)) is that this returns 1 for zero and it handles negative numbers. <lsl>integer hexchars(integer a) {

   //the OR 15 handles 0 & 1 (which falsely go to zero)
   //the OR shift and AND deal with negative numbers
   //the long float is ln(16)
   return llCeil(llLog((a | 15 | (a >> 1)) & 0x7FFFFFFF) / 2.7725887222397812376689284858327);

}

default {

   state_entry()
   {
       list a = [-1, 0x0, 0x1, 2,
           0xF,0x10, 0x11,
           0xFF,0x100, 0x101,
           0xFFF,0x1000, 0x1001,
           0xFFFF,0x10000, 0x10001,
           0xFFFFF,0x100000, 0x100001,
           0xFFFFFF,0x1000000, 0x1000001,
           0xFFFFFFF,0x10000000, 0x10000001,
           0x80000000, 0xFFFFFFFE];
       integer b = -llGetListLength(a);
       for(;b;++b)
           llOwnerSay(llList2CSV([llList2Integer(a,b), hexchars(llList2Integer(a,b))]));
   }

}</lsl>