2015-07-08 17 views
11

में परिवर्तित करना यह मामूली लगता है, लेकिन मुझे ऐसा करने का कोई तरीका नहीं मिल रहा है।एक स्ट्र को एक और [u8]

उदाहरण के लिए,

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

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

साथ संकलित करने के लिए विफल:

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

documentation, हालांकि, कहा गया है कि:

एसटीआर की वास्तविक प्रतिनिधित्व स्लाइस के लिए सीधी मैपिंग है: & str & जैसा ही है [u 8]।

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

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

या, अपने विशिष्ट उदाहरण में, आप एक बाइट शाब्दिक इस्तेमाल कर सकते हैं:

+1

तथ्य यह है कि इस बारे में पाँच में से एक है इस त्रुटि संदेश के लिए Google परिणाम मुझे पागल लग रहा है! मैंने इसे अपने पहले टेस्ट प्रोग्राम पोस्ट-1.0 ("बिल्ली" को लागू करने) में मारा। –

उत्तर

15

आप as_bytes विधि का उपयोग कर सकते हैं

let x = b"a"; 
f(x) 
+4

मैं यह जोड़ना चाहता हूं कि प्रलेखन * प्रतिनिधित्व * से संबंधित है, लेकिन अवधारणात्मक रूप से एक स्ट्रिंग स्लाइस गारंटी देता है कि इसकी सामग्री वैध यूटीएफ -8 है, जबकि बाइट स्लाइस नहीं है। – llogiq

संबंधित मुद्दे