查看“LlStringLength”的源代码
←
LlStringLength
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function: integer llStringLength( string str ); |参数= 参数:•字符串str |返回值= 返回值:返回一个整数,它是str中的字符数(不计算空值)。 |注意事项=最后一个字符的索引不等于字符串长度。 字符索引从零开始(第一个字符的索引为零)。 |示例= 示例1 <pre> // 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 </pre> |相关函数= [[llGetListLength]] |相关事件=无 }}
该页面使用的模板:
模板:LSL Header
(
查看源代码
)
模板:LSLC
(
查看源代码
)
模板:LSLGC
(
查看源代码
)
模板:Multi-lang
(
查看源代码
)
模板:函数详情
(
查看源代码
)
返回至
LlStringLength
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
网站首页
知识百科
编辑帮助
最近更改
工具
链入页面
相关更改
特殊页面
页面信息