https://github.com/editso/c2rs
将C结构体转换为Rust结构体
https://github.com/editso/c2rs
Last synced: 2 months ago
JSON representation
将C结构体转换为Rust结构体
- Host: GitHub
- URL: https://github.com/editso/c2rs
- Owner: editso
- License: mit
- Created: 2021-12-23T05:26:45.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2021-12-28T07:01:41.000Z (over 3 years ago)
- Last Synced: 2024-04-24T08:29:24.880Z (about 1 year ago)
- Language: Rust
- Size: 9.77 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# c2rs
This is a macro that converts the `struct` of the `c` language into a `rust struct`[![Crates.io][crates-badge]][crates-url]
[![MIT licensed][mit-badge]][mit-url][crates-badge]: https://img.shields.io/crates/v/c2rs.svg
[crates-url]: https://crates.io/crates/c2rs
[mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg
[mit-url]: https://github.com/editso/c2rs/blob/master/LICENSE# use
```
// Cargo.toml[dependencies]
c2rs = "0.1.2"```
# Example
```
fn test(){
use c2rs::c2rs_def;type DWORD = u32;
const SIZE: usize = 10;c2rs_def!(
struct A{
DWORD var1;
DWORD var2;
union {
DWORD var4;
DWORD var5;
}var3;
struct {
u8 var7;
}var6;DWORD array[SIZE];
};
struct B{
u8 var1;
};
// ....
);
let mut buffer = [1u8; 1024];
unsafe{
let mut buf = A::from_mut_bytes(buffer.as_mut_ptr());
let buf = buf.as_mut().unwrap();
buf.var1 = 10;
assert_eq!(10, buf.var1);
assert_eq!(10, buffer[0]);
let mut b = B::from_mut_bytes(buffer.as_mut_ptr()).as_mut().unwrap();
assert_eq!(10, b.var1);
}
}
```