Converting a str to a &[u8]

47,232

You can use the as_bytes method:

fn f(s: &[u8]) {}

pub fn main() {
    let x = "a";
    f(x.as_bytes())
}

or, in your specific example, you could use a byte literal:

let x = b"a";
f(x)
Share:
47,232
ynimous
Author by

ynimous

Updated on July 09, 2020

Comments

  • ynimous
    ynimous almost 4 years

    This seems trivial, but I cannot find a way to do it.

    For example,

    fn f(s: &[u8]) {}
    
    pub fn main() {
        let x = "a";
        f(x)
    }
    

    Fails to compile with:

    error: mismatched types:
     expected `&[u8]`,
        found `&str`
    (expected slice,
        found str) [E0308]
    

    documentation, however, states that:

    The actual representation of strs have direct mappings to slices: &str is the same as &[u8].

  • llogiq
    llogiq almost 9 years
    I'd like to add that the documentation relates to the representation, but conceptually a string slice guarantees that its content is valid UTF-8, whereas a byte slice doesn't.