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:
toml
[dependencies]
stdint = "*"
To use the library in no_std
environment, disable the use of
default features:
toml
[dependencies]
stdint = { version = "*", default-features = false }
Note that the specific type aliases depend on your target architecture. On docs.rs,
the int_fast16_t
type is currently shown as aliased to an std::ffi::c_long
; this is an artifact
of the documentation generator:
rust
pub type int_fast16_t = c_long;
The actual guarantees are:
```rust
fn int16() {
asserteq!(sizeof::
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
shell
$ cargo test --no-default-features
| 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
|
| Type | Purpose |
|-------------------------|---------------------------------|
| intptr_t
, uintptr_t
| Type capable of holding *void
|
| intmax_t
, uintmax_t
| Largest integer type available |
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
.