From 9cca37fa05aec07cd2f62e6e8d5f4efad6ec54e1 Mon Sep 17 00:00:00 2001 From: Dukantic Date: Tue, 8 Apr 2025 10:10:25 +0200 Subject: [PATCH] bytes to string fix --- fo.txt | Bin 6 -> 3 bytes src/byte_writer.rs | 22 ++++++++++++++-------- src/main.rs | 23 ++++++++++++----------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/fo.txt b/fo.txt index 23d27469312d5f49dd226b138174dfe782975669..a41329f50d6ab406a4bf11f760637d3a0c08ec1d 100644 GIT binary patch literal 3 KcmZSF&;S4d<^eJQ literal 6 NcmZQzU=Uce3IGBm0bKw9 diff --git a/src/byte_writer.rs b/src/byte_writer.rs index 840ca2f..69c1d65 100644 --- a/src/byte_writer.rs +++ b/src/byte_writer.rs @@ -28,20 +28,26 @@ pub fn string_to_binary(bits: &str) -> Vec { bytes } -pub fn binary_to_string(bytes: Vec, len: u32) -> String { +pub fn binary_to_string(bytes: Vec, len: u8) -> String { let mut binary = String::new(); - let mut n = 0; - for b in bytes { - let mut current = b; - while n < len && current > 0 { + //bytes.reverse(); + let mut word = Vec::new(); + for b in &bytes { + let mut current = *b; + while current != 0b0000_0000 { if current % 2 == 1 { - binary.push('1'); + word.push('1'); } else { - binary.push('0'); + word.push('0'); } current >>= 1; - n += 1; } + word.reverse(); + binary = binary + &word.iter().collect::(); + word = Vec::new(); + } + for _ in 0..8 - len { + binary.pop(); } binary diff --git a/src/main.rs b/src/main.rs index 66fea49..8762153 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,21 +27,22 @@ fn main() -> std::io::Result<()> { eprintln!("root.n = {:#?}", root.n); /* - let v = string_to_binary("1010001010101010"); - let i: u32 = 16; - //eprintln!("v = {:?}", v); - let len = i.to_be_bytes(); + let binary = "101100001"; + let mut v = string_to_binary(binary); + let length = (binary.len() % 8) as u8; + //eprintln!("v = {:?}", v); + let len_bytes = length.to_be_bytes(); - eprintln!("v = {:?}", v); - eprintln!("len = {:?}", len); - file2.write_all(&len)?; - file2.write_all(&v)?; - */ + eprintln!("v = {:?}", v); + eprintln!("len = {:?}", len_bytes); + println!("101100001"); + file2.write_all(&len_bytes)?; + file2.write_all(&v)?;*/ - let mut buffer = [0u8; 4]; + let mut buffer = [0u8; 1]; file2.read_exact(&mut buffer)?; eprintln!("buffer = {:?}", buffer); - let len = u32::from_be_bytes(buffer); + let len = u8::from_be_bytes(buffer); eprintln!("len = {:?}", len); let mut read = Vec::new();