tft每日頭條

 > 生活

 > c語言改變結構體對齊方式

c語言改變結構體對齊方式

生活 更新时间:2024-12-22 09:50:49

c語言改變結構體對齊方式(程序與單片機通信時)1

通信

在單片機開發過程中,難免要遇到與PC通信的問題。這裡有個不可回避的問題就是數據結構的定義,隻有數據結構内存分布一緻時,才能方便的通信,而不需要進行轉換。在C語言裡,定義一個數據結構并字節對齊非常簡單。如下

__attribute__((packed)) struct Test { u32 a; u8 b; u32 c; u8 arr[5]; } struct Test t; 此結構共14字節, 并且可以直接使用。

如何在C#中實現一個同樣的結構體呢?需要用到System.Runtime.InteropServices裡的内存管理StructLayout和MarshalAs。并且數據要動态分布内存。

[StructLayout(LayoutKind.Sequential, Pack =1)] struct Test { public UInt32 a; public Byte b; public UInt32 c; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] Byte[] arr; } Test t; //在使用前要給數據分布内存 t.arr = new Byte [5]; 使用t.

這兩個和在内存中的分布完全一緻,可以在單片機與PC機之間相互通信了。

c語言改變結構體對齊方式(程序與單片機通信時)2

通信

c語言改變結構體對齊方式(程序與單片機通信時)3

想進一步了解此話題,請繼續閱讀以下文章:

C#程序與單片機通信時,如何實現結構體轉換為字節流

C#程序與單片機通信時,如何自動初始化串口(1)?

C#程序與單片機通信時,如何自動初始化串口(2)?

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved