伊莉討論區

標題: C [打印本頁]

作者: mdlin    時間: 2018-7-31 10:26 PM     標題: C

本帖最後由 mdlin 於 2018-7-31 10:26 PM 編輯

小弟不才, 敢問各位高手,原本C語言中的寫法
typedef union
{
        struct
        {
                unsigned char Clock;
                unsigned char Time;
                unsigned char Date;
                unsigned char Year;
        } feild;
        unsigned short reg32;
} tpTimeFrame;

tpTimeFrame TimeFrame;
TimeFrame.reg32 = 0x00000000;

有什麼方法可以用C#實現 ?
作者: jackyo04    時間: 2018-8-1 08:48 AM

據我了解,好像要自己想辦法設計XD
網路上有提供方法可以參考https://www.codeproject.com/Questions/141385/typedef-in-C
或者你用個Class包起來做呢?

作者: johnwanz    時間: 2018-8-1 09:29 AM

C# 應該是沒有 union.

這個看起來是C語言中, 對暫存器的控制寫法.

在物件導向設計原則裡面, 其實不傾向將上下層結構直接透通, 會造成設計上的依賴性, 未來不易變動. 可以考慮透過設計一個中間層, 一個存取介面Class, 將暫存器存取邏輯封裝在裡面.
就外部而言, 你還是可讀取或設定局部參數, 也可以讀寫整個資料.
內部在未來可以依照不同的實作, 進行修改. 以利於未來其他案子的應用.
當然, 前提是還有打算要沿用, 不是拋棄式的話...

如果你還是想要用C#來寫union, 這裡有一篇文章, 不過我沒有試過. (因為還沒有遇到"必須"在C#中這樣寫)
How To Simulate C++ Union In C#?
作者: mdlin    時間: 2018-8-1 10:30 AM

感謝各位大大提供回覆,暫存器常用此種寫法,還有通訊也常用到。舉例來說,如UART通訊收到16 byte 資料,其中前兩個Byte 是Header , 後面是Command , Payload , CRC , 等等。不同的Command還有不同方式解釋這16 byte 資料。不知到C#有什麼方式可以解決此問題 ?
作者: jackyo04    時間: 2018-8-1 11:20 AM

不就分別存在不同的陣列裡就可以了嗎..
想要長什麼樣子可以自己想
或是看要不要用個Class當容器呢

作者: virdoll    時間: 2018-8-6 03:53 PM

用過陣列存放; 或是轉成字串再用正規式處理
或者是用Class處理。
作者: advantise    時間: 2018-8-27 01:49 PM

只能存在4 bytes 的 array, reg32的值要用那 4 bytes array另外去算。




歡迎光臨 伊莉討論區 (http://www989.eyny.com/) Powered by Discuz!