Skip to content

sunsided/stdint-rs

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

stdint

Provides C99 integer types such as uint_fast16_t, uint_least16_t etc. for interfacing with C libraries that use them in both standard and no_std environments. Inspired by Vojtech Kral's C99 crate.

The library defaults to use the std crate. You can therefore simply add the dependency to your Cargo.toml file:

[dependencies]
stdint = "1"

To use the library in no_std environment, disable the use of default features:

[dependencies]
stdint = { version = "1", default-features = false }

Note that the platform-dependent aliases (the *_fast* family and intmax_t/uintmax_t) are resolved at build time from your target's C toolchain headers, so their exact underlying type depends on the target. For example, docs.rs builds on x86_64 Linux, where int_fast16_t resolves to a 64-bit integer; on a target such as x86_64-unknown-linux-musl the same alias is 32 bits wide.

The actual guarantees are:

#[test]
fn int16() {
    assert_eq!(size_of::<int16_t>(), 2);
    assert!(size_of::<int_least16_t>() >= 2);
    assert!(size_of::<int_fast16_t>() >= 2);

    assert_eq!(size_of::<uint16_t>(), 2);
    assert!(size_of::<uint_least16_t>() >= 2);
    assert!(size_of::<uint_fast16_t>() >= 2);
}

To execute the tests in no_std mode, run

$ cargo test --no-default-features

Types of defined sizes

N Exact size (N bits) Smallest type with at least N bits Fastest type with at least N bits
8 int8_t, uint8_t int_least8_t, uint_least8_t int_fast8_t, uint_fast8_t
16 int16_t, uint16_t int_least16_t, uint_least16_t int_fast16_t, uint_fast16_t
32 int32_t, uint32_t int_least32_t, uint_least32_t int_fast32_t, uint_fast32_t
64 int64_t, uint64_t int_least64_t, uint_least64_t int_fast64_t, uint_fast64_t

Special types

Type Purpose
intptr_t, uintptr_t Type capable of holding *void
intmax_t, uintmax_t Largest integer type available

Constants

According MIN and MAX constants defined in stdint.h are exposed through the consts module such as INT_FAST16_MIN and INT_FAST16_MAX. Due to Rust's type system, these value are identical to int_fast16_t::MIN and int_fast16_t::MAX.

About

C99 stdint types such as uint_fast8_t for performance and interoperability.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages

  • Rust 81.3%
  • C 18.7%