string type conversions
Legend:
- copy - get a freshly allocated copy of the 'from' data
- alias - reuse the 'from' data, without allocation
- stream - get individual values from the string, without allocation
- st - the input string
from string
- string -> []u8: alias with
transmute([]u8)st - string -> string: copy with
strings.clone(st) - string -> cstring: copy with
strings.clone_to_cstring(st) - string -> cstring: alias with
strings.unsafe_string_to_cstring(st) - string -> []rune: stream with
for rune in st { ... } - string -> []rune: copy with
utf8.string_to_runes(st) - string -> [^]u8: alias with
raw_data(st)
from cstring
- cstring -> string: alias with
string(st) - cstring -> [^]u8: alias with
transmute([^]u8)st
from "string literal"
- "string literal" -> string: alias with
string(st)ornewstr : string = st - "string literal" -> cstring: alias with
cstring(st)ornewstr : cstring = st
from []u8
- []u8 -> string: alias with
transmute(string)st - []u8 -> string: alias with
string(st)unless a slice literal - []u8 -> [^]u8: alias with
raw_data(st)
from []rune
- []rune -> string: copy with
utf8.runes_to_string(st)
from [^]u8
- [^]u8 -> cstring: alias with
cstring(st)
from [^]u8, int
- [^]u8, int -> string: alias with
strings.string_from_ptr(ptr, length)
lang/strings.odin covers this in greater detail, with tests.