Difference between revisions of "Text To Byte Conversion"

From Second Life Wiki
Jump to navigation Jump to search
Line 5: Line 5:


<lsl>
<lsl>
string base64characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
list text2bytes(string text)
list text2bytes(string text)
{
{

Revision as of 02:30, 5 January 2008

Here's a function to pass a string of text and receive a list of bytes. A second function is provided to work in reverse. These methods are especially useful for working with encryption.

Text2Bytes.lsl

<lsl> list text2bytes(string text) {

   string base64 = llStringToBase64(text);
   list bytes;
   integer i;
   integer n = llStringLength(base64);
   for(i = 0; i < n; i += 4)
   {
       integer dword = llBase64ToInteger(llGetSubString(base64, i, i + 3) + "AA") >> 8;
       bytes += (dword & 0x00FF0000) >> 16;
       bytes += (dword & 0x0000FF00) >> 8;
       bytes += (dword & 0x000000FF) >> 0;
   }
   return bytes;

} string bytes2text(list bytes) {

   string text;
   integer i;
   integer n = llGetListLength(bytes);
   for(i = 0; i < n; i += 3)
   {
       integer dword = 
           (llList2Integer(bytes, i) & 0xFF) << 24 
           | (llList2Integer(bytes, i + 1) & 0xFF) << 16 
           | (llList2Integer(bytes, i + 2) & 0xFF) << 8;
       text += llGetSubString(llIntegerToBase64(dword), 0, 3);
   }
   return llBase64ToString(text);

}

default {

   state_entry()
   {
       list bytes = text2bytes("Hello, Avatar!");
       llSay(0, llList2CSV(bytes));
       string text = bytes2text(bytes);
       llSay(0, text);
   }
   touch_start(integer total_number)
   {
       list bytes = text2bytes("Touched.");
       llSay(0, llList2CSV(bytes));
       string text = bytes2text(bytes);
       llSay(0, text);
   }

}

</lsl>