国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#: 結(jié)構(gòu)體 struct 應(yīng)用筆記

這篇具有很好參考價值的文章主要介紹了C#: 結(jié)構(gòu)體 struct 應(yīng)用筆記。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

說明:記錄 在 C# 中的一些結(jié)構(gòu)體相關(guān)的應(yīng)用

1. 結(jié)構(gòu)體中定義固定長度的數(shù)組

????????在下面的示例中,在struct中定義了一個固定長度為 8 的 byte 數(shù)組data。通過使用MarshalAsAttributeUnmanagedType.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ù)組使用

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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 探究C#中Class和Struct互相嵌套的內(nèi)存問題

    探究C#中Class和Struct互相嵌套的內(nèi)存問題

    先回顧一下C#的內(nèi)存種類 棧區(qū):由編譯器自動分配釋放 ,存放值類型的對象本身,引用類型的引用地址(指針),靜態(tài)區(qū)對象的引用地址(指針),常量區(qū)對象的引用地址(指針)等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。 堆區(qū)(托管堆):用于存放引用類型對象本身。在c#中

    2024年02月08日
    瀏覽(16)
  • 【C語言】struct結(jié)構(gòu)體

    【C語言】struct結(jié)構(gòu)體

    具有相同或不同類型元素的集合叫做結(jié)構(gòu)體。定義一個結(jié)構(gòu)體,本質(zhì)是在制作一個類型: 在C中,結(jié)構(gòu)體內(nèi)只能存放各種類型的變量,不能存函數(shù): 像上面這樣就是聲明了一個結(jié)構(gòu)體 struct Student ,此時的 struct Student 相當(dāng)于一個類型名。 然后我們可以用這個自己聲明的結(jié)構(gòu)體

    2024年02月03日
    瀏覽(20)
  • Golang struct 結(jié)構(gòu)體指針類型 / 結(jié)構(gòu)體值類型

    Golang struct 結(jié)構(gòu)體指針類型 / 結(jié)構(gòu)體值類型

    結(jié)構(gòu)體變量之間的賦值是值拷貝。 當(dāng)需要通過變量去修改另外一個結(jié)構(gòu)體內(nèi)容的時候,可以通過傳遞地址的方式來達(dá)到這個效果。 這樣使用肯定是不對的,因為.的運(yùn)算優(yōu)先級要高,所以先會去執(zhí)行p2.age,之后又取地址,所以這個就不行。 在代碼執(zhí)行的時候先執(zhí)行.的操作,

    2024年02月13日
    瀏覽(24)
  • 【go語言基礎(chǔ)】結(jié)構(gòu)體struct

    主要是敲代碼,敲的過程中會慢慢體會。 結(jié)構(gòu)體是用戶定義的類型,表示若干字段的集合,目的是將數(shù)據(jù)整合在一起。 簡單的說,類似Java中的實體類。存儲某個實體屬性的集合。 注意:結(jié)構(gòu)體名字,結(jié)構(gòu)體屬性名的首字母大寫代表其余的包可以訪問該結(jié)構(gòu)體,類似Java中的

    2024年02月13日
    瀏覽(23)
  • Rust 數(shù)據(jù)類型 之 結(jié)構(gòu)體(Struct)

    Rust 數(shù)據(jù)類型 之 結(jié)構(gòu)體(Struct)

    目錄 結(jié)構(gòu)體(Struct) 定義與聲明 結(jié)構(gòu)體定義 結(jié)構(gòu)體實例 結(jié)構(gòu)體分類 單元結(jié)構(gòu)體(Unit Struct) 元組結(jié)構(gòu)體(Tuple Struct) 具名結(jié)構(gòu)體(Named Struct) 結(jié)構(gòu)體嵌套 結(jié)構(gòu)體方法 例1:結(jié)構(gòu)體轉(zhuǎn)換為字符串描述 例2:矩形的周長和面積 例3:結(jié)構(gòu)體字段的更新與輸出 關(guān)聯(lián)函數(shù) 結(jié)構(gòu)體

    2024年02月16日
    瀏覽(27)
  • Golang空結(jié)構(gòu)體struct{}的作用?

    在平時做項目得時候,經(jīng)常會看到很多包里面定義了結(jié)構(gòu)體。 e.g. 在 context 包里面 Context 接口中的 Done() 方法, Done() 返回一個是以空結(jié)構(gòu)體定義數(shù)據(jù)的通道 chan struct{} ,那這里他是有什么特殊用意嗎?我們接下來分析 struct{} 的作用。 struct{} 空結(jié)構(gòu)是沒有字段的結(jié)構(gòu)類型。下

    2024年02月11日
    瀏覽(19)
  • go struct結(jié)構(gòu)體之間的轉(zhuǎn)換

    原文鏈接:https://www.zhoubotong.site/post/94.html 說下背景吧,大家在開發(fā)中可能在不同的目錄(package)下定義了相同的struct(屬性參數(shù)完全一樣如名字、個數(shù)和類型),在方法調(diào)用傳參數(shù)的時候,可能是用到了其中某一個struct的引用。 那么這里就牽扯到相互間的轉(zhuǎn)換:直接上demo: 顯然

    2023年04月17日
    瀏覽(29)
  • Go語言入門6(struct 結(jié)構(gòu)體)

    ?結(jié)構(gòu)體是一種聚合的數(shù)據(jù)類型,是由零個或多個任意類型的值聚合成的實體。每個值稱為結(jié)構(gòu)體的成員 type + 結(jié)構(gòu)體名 + struct + {成員列表} ??如果結(jié)構(gòu)體成員名字是以大寫字母開頭的,那么該成員就是導(dǎo)出的。這是Go語言導(dǎo)出規(guī)則決 定的。一個結(jié)構(gòu)體可能同時包含導(dǎo)出和

    2023年04月12日
    瀏覽(20)
  • golang 結(jié)構(gòu)體struct轉(zhuǎn)map實踐

    golang 結(jié)構(gòu)體struct轉(zhuǎn)map實踐

    ? 1、反射 type sign struct { ?? ?Name string `json:\\\"name,omitempty\\\"` ?? ?Age ?int ? ?`json:\\\"age,omitempty\\\"` } ? var s sign s.Name = \\\"csdn\\\" s.Age = 18 ? ? //方式1 反射 var data = make(map[string]interface{}) ? t := reflect.TypeOf(s) v := reflect.ValueOf(s) for i := 0; i t.NumField(); i++ { ?? ?data[t.Field(i).Name] = v.Field(i).Interfa

    2024年02月12日
    瀏覽(20)
  • Golang空結(jié)構(gòu)體struct{}的作用是什么?

    Golang空結(jié)構(gòu)體struct{}的作用是什么?

    在Go語言中,空結(jié)構(gòu)體 struct{}是一種特殊的數(shù)據(jù)類型,它不占用任何內(nèi)存空間。空結(jié)構(gòu)體沒有任何字段,也沒有任何方法。盡管它看起來沒有實際的用途,但在編程中確實有一些常見的應(yīng)用場景。 以下是空結(jié)構(gòu)體 struct{}的幾個常見用途: 空結(jié)構(gòu)體可以用作占位符,表示某個位

    2024年02月14日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包