LlStringLength

来自人工智能助力教育知识百科
Wzc讨论 | 贡献2020年8月10日 (一) 07:48的版本 (创建页面,内容为“{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function: integer llStringLength( string str ); |参数= 参数:…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

Template:Needs Translation/


函数名
Function: integer llStringLength( string str );
参数:•字符串str
返回值:返回一个整数,它是str中的字符数(不计算空值)。
注意事项
最后一个字符的索引不等于字符串长度。

字符索引从零开始(第一个字符的索引为零)。

示例
示例1
// assumptions: 
//    object name: LSLWiki
//    script name: _lslwiki
 
default
{
    state_entry()
    {
        string HowLongAmI = "123";
        integer strlen = llStringLength(HowLongAmI);
        llOwnerSay( "'" + HowLongAmI + "' has " +(string) strlen + " characters.");
        // The owner of object LSLWiki will hear 
        // LSLWiki: '123' has 3 characters.
    }
}
LSL-2 sees all strings as UTF8
LSL-Mono sees all string as UTF16
llStringLength gets the number of characters
Both UTF8 and UTF16 use multibyte characters
Some communication functions (e.g. llHTTPResponse) are limited by number of Bytes, and work with UTF8 strings
integer getStringBytes(string msg) {
    //Definitions:
    //msg == unescapable_chars + escapable_chars
    //bytes == unescapable_bytes + escapable_bytes
    //unescapable_bytes == unescapable_chars
 
    //s == unescapable_chars + (escapable_bytes * 3)
    string s = llEscapeURL(msg);//uses 3 characters per byte escaped.
 
    //remove 1 char from each escapable_byte's triplet.
    //t == unescapable_chars + (escapable_bytes * 2)
    string t = (string)llParseString2List(s,["%"],[]);
 
    //return == (unescapable_chars * 2 + escapable_bytes * 4) - (unescapable_chars + (escapable_bytes * 3))
    //return == unescapable_chars + escapable_bytes == unescapable_bytes + escapable_bytes
    //return == bytes
    return llStringLength(t) * 2 - llStringLength(s);
}
Getting string bytes including multibyte characters
If we write bytes of msg and s as:
mb(msg bytes) = nb(no escaped bytes) + bb(before escaped bytes)
sb(s bytes) = nb + ab(after escaped bytes)
And,
ab = bb * 3 (each 1 byte like '#' becomes escaped to 3 bytes "%23"):
Then,
mb = sb - bb * 2
All escaped in s are now "%xx"(x:0-9 or A-F) forms, so, bb = number of '%'s in s.
To count '%'s, we make string t removing '%'s from s, and:
bb = sb - tb(t bytes)
(We separate s to a list removing '%'s by llParseString2List(), and again join to one string t by typecast.)
Now we got answer:
mb = sb - (sb - tb) * 2 = tb * 2 - sb
相关函数
llGetListLength
相关事件