# c2rs **Repository Path**: editso/c2rs ## Basic Information - **Project Name**: c2rs - **Description**: 将C结构体转换为Rust结构体 - **Primary Language**: Rust - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-12-27 - **Last Updated**: 2025-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## 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); } } ```