From 9a1839ce1fb73d6d1da781e6568db6e7221d6347 Mon Sep 17 00:00:00 2001 From: Dukantic Date: Mon, 7 Apr 2025 23:07:25 +0200 Subject: [PATCH] write and read with len at first --- fo.txt | Bin 1 -> 6 bytes src/byte_writer.rs | 19 +++++++++++++++++++ src/main.rs | 34 +++++++++++++++++++++++++++------- 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/fo.txt b/fo.txt index eea1bf0c31f3d493509fa1ddd9d25c734eb35277..23d27469312d5f49dd226b138174dfe782975669 100644 GIT binary patch literal 6 NcmZQzU=Uce3IGBm0bKw9 literal 1 IcmZ1g005x?p#T5? diff --git a/src/byte_writer.rs b/src/byte_writer.rs index 90e2710..840ca2f 100644 --- a/src/byte_writer.rs +++ b/src/byte_writer.rs @@ -27,3 +27,22 @@ pub fn string_to_binary(bits: &str) -> Vec { bytes } + +pub fn binary_to_string(bytes: Vec, 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 +} diff --git a/src/main.rs b/src/main.rs index 33134c7..66fea49 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,7 @@ use std::io::prelude::*; mod byte_writer; mod node; -use byte_writer::string_to_binary; +use byte_writer::{binary_to_string, string_to_binary}; use node::Node; fn main() -> std::io::Result<()> { @@ -26,13 +26,33 @@ fn main() -> std::io::Result<()> { let root = node::create_tree(vec); 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(); - file2.read_to_end(&mut buffer)?; - eprintln!("v = {:#?}", v); - eprintln!("buffer = {:#?}", buffer); + eprintln!("v = {:?}", v); + eprintln!("len = {:?}", len); + file2.write_all(&len)?; + 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)?; //file2.write_all(&test.to_be_bytes())?; //file2.write_all(&[*key as u8])?;