說明:記錄 在 C# 中的一些結(jié)構(gòu)體相關(guān)的應(yīng)用
1. 結(jié)構(gòu)體中定義固定長度的數(shù)組
????????在下面的示例中,在struct中定義了一個固定長度為 8 的 byte 數(shù)組data
。通過使用MarshalAsAttribute
的UnmanagedType.ByValArray
參數(shù),指定了數(shù)組的類型為值類型數(shù)組,并使用SizeConst
字段指定了數(shù)組的大小為 8。請注意,使用固定長度的數(shù)組時,需要確保數(shù)組的大小與指定的大小一致,否則可能會導(dǎo)致數(shù)據(jù)訪問錯誤。
public struct OTA_TX_CMD_FRAME
{
public byte head; //數(shù)據(jù)頭
public byte chs; //通道
public byte group; //group
public byte cmd; //命令,功能碼
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] data; //發(fā)送數(shù)據(jù)
public UInt16 crc16; //校驗值
}
結(jié)構(gòu)體中的數(shù)組使用文章來源:http://www.zghlxwxcb.cn/news/detail-797963.html
OTA_TX_CMD_FRAME ota_cmd_start = new OTA_TX_CMD_FRAME();
ota_cmd_start.data = new byte[8];
ota_cmd_start.head = OTA_CMD_DATA_HEAD;
ota_cmd_start.chs = chs;
ota_cmd_start.group = (byte)(ota_mode << 4);
ota_cmd_start.data[6] = Convert.ToByte(comboBox_bin_ver_1.Text);
ota_cmd_start.data[5] = Convert.ToByte(comboBox_bin_ver_2.Text);
ota_cmd_start.data[4] = Convert.ToByte(comboBox_bin_ver_3.Text);
ota_cmd_start.data[3] = (byte)(((UInt32)(MyGlobal.File_size)) >> 24);
ota_cmd_start.data[2] = (byte)(((UInt32)(MyGlobal.File_size)) >> 16);
ota_cmd_start.data[1] = (byte)(((UInt32)(MyGlobal.File_size)) >> 8);
ota_cmd_start.data[0] = (byte)(((UInt32)(MyGlobal.File_size)) >> 0);
2. C#? 結(jié)構(gòu)體struct 轉(zhuǎn) byte 數(shù)組
????????C#中可以使用Marshal類的StructureToPtr方法將結(jié)構(gòu)體轉(zhuǎn)換為字節(jié)數(shù)組。下面是一個示例代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-797963.html
public struct Data1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public char[] Device_ID;
}
public byte[] StructToBytes<T>(T obj)
{
int size = Marshal.SizeOf(typeof(T));
IntPtr bufferPtr = Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(obj, bufferPtr, false);
byte[] bytes = new byte[size];
Marshal.Copy(bufferPtr, bytes, 0, size);
return bytes;
}
catch (Exception ex)
{
throw new Exception("Error in StructToBytes! " + ex.Message);
}
finally
{
Marshal.FreeHGlobal(bufferPtr);
}
}
// 使用示例
Data1 data = new Data1();
data.Device_ID = new char[] { 'A', 'B' };
byte[] byteArray = StructToBytes(data);
到了這里,關(guān)于C#: 結(jié)構(gòu)體 struct 應(yīng)用筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!