Read and write DWARF's "Little Endian Base 128" variable length integer encoding
22
stars
79
commits
Rust
primary language
Jun 15, 2026
updated
leb128Read and write DWARF's "Little Endian Base 128" (LEB128) variable length integer encoding.
The implementation is a direct translation of the pseudocode in the DWARF 4 standard's appendix C.
Either
$ cargo add leb128
or add this to your Cargo.toml:
[dependencies]
leb128 = "0.2.1"
use leb128;
let mut buf = [0; 1024];
// Write to anything that implements `std::io::Write`.
{
let mut writable = &mut buf[..];
leb128::write::signed(&mut writable, -12345).expect("Should write number");
}
// Read from anything that implements `std::io::Read`.
let mut readable = &buf[..];
let val = leb128::read::signed(&mut readable).expect("Should read number");
assert_eq!(val, -12345);
This crate comes with a leb128-repl program that you can use after cargo install leb128 or by running cargo run in clone of this repository.
$ leb128-repl
LEB128 Read-Eval-Print-Loop!
Converts numbers to signed and unsigned LEB128 and displays the results in
base-10, hex, and binary.
> 42
# unsigned LEB128
[42]
[2a]
[00101010]
# signed LEB128
[42]
[2a]
[00101010]
> -42
# unsigned LEB128
error
# signed LEB128
[86]
[56]
[01010110]
> 9001
# unsigned LEB128
[169, 70]
[a9, 46]
[10101001, 01000110]
# signed LEB128
[169, 198, 0]
[a9, c6, 0]
[10101001, 11000110, 00000000]
> -9001
# unsigned LEB128
error
# signed LEB128
[215, 185, 127]
[d7, b9, 7f]
[11010111, 10111001, 01111111]
>
Licensed under either of
LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)LICENSE-MIT or https://opensource.org/licenses/MIT)at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Rust
97.0%
Shell
3.0%
Read and write DWARF's "Little Endian Base 128" variable length integer encoding
22
stars
79
commits
Rust
primary language
Jun 15, 2026
updated
leb128Read and write DWARF's "Little Endian Base 128" (LEB128) variable length integer encoding.
The implementation is a direct translation of the pseudocode in the DWARF 4 standard's appendix C.
Either
$ cargo add leb128
or add this to your Cargo.toml:
[dependencies]
leb128 = "0.2.1"
use leb128;
let mut buf = [0; 1024];
// Write to anything that implements `std::io::Write`.
{
let mut writable = &mut buf[..];
leb128::write::signed(&mut writable, -12345).expect("Should write number");
}
// Read from anything that implements `std::io::Read`.
let mut readable = &buf[..];
let val = leb128::read::signed(&mut readable).expect("Should read number");
assert_eq!(val, -12345);
This crate comes with a leb128-repl program that you can use after cargo install leb128 or by running cargo run in clone of this repository.
$ leb128-repl
LEB128 Read-Eval-Print-Loop!
Converts numbers to signed and unsigned LEB128 and displays the results in
base-10, hex, and binary.
> 42
# unsigned LEB128
[42]
[2a]
[00101010]
# signed LEB128
[42]
[2a]
[00101010]
> -42
# unsigned LEB128
error
# signed LEB128
[86]
[56]
[01010110]
> 9001
# unsigned LEB128
[169, 70]
[a9, 46]
[10101001, 01000110]
# signed LEB128
[169, 198, 0]
[a9, c6, 0]
[10101001, 11000110, 00000000]
> -9001
# unsigned LEB128
error
# signed LEB128
[215, 185, 127]
[d7, b9, 7f]
[11010111, 10111001, 01111111]
>
Licensed under either of
LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)LICENSE-MIT or https://opensource.org/licenses/MIT)at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Rust
97.0%
Shell
3.0%