write and read with len at first

This commit is contained in:
2025-04-07 23:07:25 +02:00
parent e0e079a71d
commit 9a1839ce1f
3 changed files with 46 additions and 7 deletions

BIN
fo.txt

Binary file not shown.

View File

@@ -27,3 +27,22 @@ pub fn string_to_binary(bits: &str) -> Vec<u8> {
bytes bytes
} }
pub fn binary_to_string(bytes: Vec<u8>, len: u32) -> String {
let mut binary = String::new();
let mut n = 0;
for b in bytes {
let mut current = b;
while n < len && current > 0 {
if current % 2 == 1 {
binary.push('1');
} else {
binary.push('0');
}
current >>= 1;
n += 1;
}
}
binary
}

View File

@@ -6,7 +6,7 @@ use std::io::prelude::*;
mod byte_writer; mod byte_writer;
mod node; mod node;
use byte_writer::string_to_binary; use byte_writer::{binary_to_string, string_to_binary};
use node::Node; use node::Node;
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
@@ -26,13 +26,33 @@ fn main() -> std::io::Result<()> {
let root = node::create_tree(vec); let root = node::create_tree(vec);
eprintln!("root.n = {:#?}", root.n); eprintln!("root.n = {:#?}", root.n);
let v = string_to_binary("101"); /*
//file2.write_all(&v)?; let v = string_to_binary("1010001010101010");
let i: u32 = 16;
//eprintln!("v = {:?}", v);
let len = i.to_be_bytes();
let mut buffer = Vec::new(); eprintln!("v = {:?}", v);
file2.read_to_end(&mut buffer)?; eprintln!("len = {:?}", len);
eprintln!("v = {:#?}", v); file2.write_all(&len)?;
eprintln!("buffer = {:#?}", buffer); file2.write_all(&v)?;
*/
let mut buffer = [0u8; 4];
file2.read_exact(&mut buffer)?;
eprintln!("buffer = {:?}", buffer);
let len = u32::from_be_bytes(buffer);
eprintln!("len = {:?}", len);
let mut read = Vec::new();
file2.read_to_end(&mut read)?;
eprintln!("read = {:?}", read);
//let current = read[4..].to_vec();
let string = binary_to_string(read, len);
eprintln!("string = {:?}", string);
//eprintln!("v = {:#?}", v);
//eprintln!("buffer = {:#?}", buffer);
//writeln!(file2, "{}", tes;t)?; //writeln!(file2, "{}", tes;t)?;
//file2.write_all(&test.to_be_bytes())?; //file2.write_all(&test.to_be_bytes())?;
//file2.write_all(&[*key as u8])?; //file2.write_all(&[*key as u8])?;