feat: add reed-solomon
This commit is contained in:
14
__misc/reed-solomon/Cargo.lock
generated
Normal file
14
__misc/reed-solomon/Cargo.lock
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "reed-solomon"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"reed-solomon 0.2.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reed-solomon"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13de68c877a77f35885442ac72c8beb7c2f0b09380c43b734b9d63d1db69ee54"
|
||||
11
__misc/reed-solomon/Cargo.toml
Normal file
11
__misc/reed-solomon/Cargo.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[package]
|
||||
name = "reed-solomon"
|
||||
version = "0.1.0"
|
||||
authors = ["Hatter Jiang <jht5945@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
reed-solomon = "0.2.1"
|
||||
|
||||
36
__misc/reed-solomon/src/main.rs
Normal file
36
__misc/reed-solomon/src/main.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
use reed_solomon::Encoder;
|
||||
use reed_solomon::Decoder;
|
||||
|
||||
fn main() {
|
||||
let data = b"Hello World!";
|
||||
|
||||
// Length of error correction code
|
||||
let ecc_len = 8;
|
||||
|
||||
// Create encoder and decoder with
|
||||
let enc = Encoder::new(ecc_len);
|
||||
let dec = Decoder::new(ecc_len);
|
||||
|
||||
// Encode data
|
||||
let encoded = enc.encode(&data[..]);
|
||||
|
||||
// Simulate some transmission errors
|
||||
let mut corrupted = *encoded;
|
||||
for i in 0..4 {
|
||||
corrupted[i] = 0x0;
|
||||
}
|
||||
|
||||
// Try to recover data
|
||||
let known_erasures = [0];
|
||||
let recovered = dec.correct(&mut corrupted, Some(&known_erasures)).unwrap();
|
||||
|
||||
let orig_str = std::str::from_utf8(data).unwrap();
|
||||
let recv_str = std::str::from_utf8(recovered.data()).unwrap();
|
||||
|
||||
println!("message: {:?}", orig_str);
|
||||
println!("original data: {:?}", data);
|
||||
println!("encoded: {:?}", encoded.data());
|
||||
println!("error correction code: {:?}", encoded.ecc());
|
||||
println!("corrupted: {:?}", corrupted);
|
||||
println!("repaired: {:?}", recv_str);
|
||||
}
|
||||
Reference in New Issue
Block a user