Difference between revisions of "LlBase64ToInteger"

From Second Life Wiki
Jump to navigation Jump to search
(the return is always predictable: if there's fewer than 6 characters, any incomplete bytes of the integer become 0 (e.g. 5 chars->30 bits->only 3 complete bytes with low byte set to 0))
 
(6 intermediate revisions by 6 users not shown)
Line 2: Line 2:
|func_id=281|func_sleep=0.0|func_energy=10.0
|func_id=281|func_sleep=0.0|func_energy=10.0
|func=llBase64ToInteger|sort=Base64ToInteger
|func=llBase64ToInteger|sort=Base64ToInteger
|return_type=integer|p1_type=string|p1_name=str
|return_type=integer|p1_type=string|p1_name=str|p1_desc=Base64 string
|return_text=that is '''str''' {{LSLG|Base64}} decoded as a big endian integer.
|return_text=that is '''str''' {{LSLGC|Base64}} decoded as a big endian integer.
|spec
|spec
|caveats=*If '''str''' contains fewer then 6 characters the return is unpredictable.
|caveats=*If {{LSLPT|str}} contains fewer than 6 characters, any incomplete least-significant bytes of the integer are set to 0.
**[[User:Strife Onizuka|BW]]: I think it ignores the null and reads 6 bytes regardless which would explain why the return is unpredictable.
**For example, the Base64 value <code>"qqqqqq=="</code> corresponds to the hexadecimal value <code>0xAAAAAAAA</code>. If the padding "=" characters and the last "q" are dropped, there are 5*6=30 bits remaining and those can form only 3 full bytes (24 bits). The result is <code>0xAAAAAA00</code>.
*Returns zero if '''str''' is longer then 8 characters.
**The Base64 value <code>"qqqq"</code> has 4*6=24 bits available, which is enough for the same 3 full bytes. The result is also <code>0xAAAAAA00</code>.
**Similarly, 3-character Base64 has 18 bits, enough for 2 bytes, and 2-character Base64 has 12 bits, enough for one byte.
**Finally, single-character Base64 has only 6 bits and thus no complete bytes, and the result is always zero.
*Returns zero if {{LSLPT|str}} is longer than 8 characters.
|constants
|constants
|examples
|examples=<source lang="lsl2">
integer value = llBase64ToInteger("3q0AAA==");
 
// writes out -559087616
llOwnerSay((string)value);
</source>
|helpers
|helpers
|also_functions={{LSL DefineRow||{{LSLG|llIntegerToBase64}}|}}
|also_functions={{LSL DefineRow||{{LSLG|llIntegerToBase64}}|}}
|also_events
|also_events
|also_tests
|also_tests
|also_articles={{LSL DefineRow||{{LSLG|Base64}}|}}
|also_articles={{LSL DefineRow||{{LSLGC|Base64}}|}}
|notes
|notes
|permission
|permission

Latest revision as of 10:30, 11 October 2023

Summary

Function: integer llBase64ToInteger( string str );

Returns an integer that is str Base64 decoded as a big endian integer.

• string str Base64 string

Caveats

  • If str contains fewer than 6 characters, any incomplete least-significant bytes of the integer are set to 0.
    • For example, the Base64 value "qqqqqq==" corresponds to the hexadecimal value 0xAAAAAAAA. If the padding "=" characters and the last "q" are dropped, there are 5*6=30 bits remaining and those can form only 3 full bytes (24 bits). The result is 0xAAAAAA00.
    • The Base64 value "qqqq" has 4*6=24 bits available, which is enough for the same 3 full bytes. The result is also 0xAAAAAA00.
    • Similarly, 3-character Base64 has 18 bits, enough for 2 bytes, and 2-character Base64 has 12 bits, enough for one byte.
    • Finally, single-character Base64 has only 6 bits and thus no complete bytes, and the result is always zero.
  • Returns zero if str is longer than 8 characters.
All Issues ~ Search JIRA for related Bugs

Examples

integer value = llBase64ToInteger("3q0AAA==");

// writes out -559087616
llOwnerSay((string)value);

See Also

Functions

•  llIntegerToBase64

Articles

•  Base64

Deep Notes

Search JIRA for related Issues

Signature

function integer llBase64ToInteger( string str );