मैं मुसीबत एक फाइल करने के लिए Vec<u16>
सामग्री लिख रही:फ़ाइल में 'Vec <u16>' सामग्री लिखने का सही तरीका क्या है?
use std::fs::File;
use std::io::{Write, BufWriter};
use std::mem;
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum ImageFormat {
GrayScale,
Rgb32,
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct ImageHeader {
pub width: usize,
pub height: usize,
pub format: ImageFormat,
}
pub struct Image {
pub header: ImageHeader,
pub data: Vec<u16>,
}
fn write_to_file(path: &str, img: &Image) -> std::io::Result<()> {
let f = try!(File::create(path));
let mut bw = BufWriter::new(f);
let slice = &img.data[..];
println!("before length: {}", slice.len());
let sl: &[u8];
unsafe {
sl = mem::transmute::<&[u16], &[u8]>(slice);
}
println!("after length: {}", sl.len());
try!(bw.write_all(sl));
return Ok(());
}
fn main() {}
write_all()
के बाद से एक &[u8]
के लिए पूछता है, मैं &[u8]
को &[u16]
का असुरक्षित रूपांतरण कर रहा हूँ। चूंकि रूपांतरण स्लाइस लम्बाई को बदलता नहीं है (slice.len()
और sl.len()
समान मान हैं), छवि डेटा का केवल आधा फ़ाइल में आउटपुट है।
यदि बेहतर मुझे किसी भी असुरक्षित रूपांतरण या प्रतिलिपि की आवश्यकता नहीं है तो यह बेहतर होगा।
धन्यवाद! मैंने 'स्लाइस :: from_raw_parts()' का उपयोग करने की आपकी विधि की कोशिश की और यह पूरी तरह से काम किया। – rillomas