Text To Byte Conversion

From Second Life Wiki

Jump to: navigation, search

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

 
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);
    }
}
 
 
Personal tools