請問如何用C#的struct去mapping一個txt file的一筆record |
答題得分者是:shieh2700
|
carl168
一般會員 發表:7 回覆:16 積分:4 註冊:2004-02-18 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
HikaruGo
中階會員 發表:22 回覆:69 積分:88 註冊:2007-12-09 發送簡訊給我 |
好像有點難
Structs have the following properties:
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
其實也沒有那麼難,在觀念上
只是兩塊記憶體之間的搬移而已... [code cpp] //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { struct MyStruct{ char a[2]; char b[3]; char c[4]; char d[5]; char e[6]; char f[7]; }; MyStruct st; //null-terminated string fields char *r = "A\0BB\0CCC\0DDDD\0EEEEE\0FFFFFF\0"; memset(&st,0,sizeof(st)); memcpy(&st,(char*)r,sizeof(st)); ListBox1->Clear(); ListBox1->Items->Add(st.a); ListBox1->Items->Add(st.b); ListBox1->Items->Add(st.c); ListBox1->Items->Add(st.d); ListBox1->Items->Add(st.e); ListBox1->Items->Add(st.f); } //--------------------------------------------------------------------------- [/code] |
HikaruGo
中階會員 發表:22 回覆:69 積分:88 註冊:2007-12-09 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
可以請問一下?!
(1) 在C#中可以宣告像以下的structure? 其中內含固定長度的資料欄位? struct MyStruct{ char a[2]; char b[3]; char c[4]; char d[5]; char e[6]; char f[7]; }; (2)在C#中, 有沒有像memcpy()的函式 支援兩塊Buffer互相拷貝? 如果(1), (2)條件皆可滿足,那就可以做得到, 否則只能自行拆解輸入資料到各個structure 的欄位裡了 個人看法, 僅供參考... ===================引 用 HikaruGo 文 章=================== C#可以嗎? |
HikaruGo
中階會員 發表:22 回覆:69 積分:88 註冊:2007-12-09 發送簡訊給我 |
|
carl168
一般會員 發表:7 回覆:16 積分:4 註冊:2004-02-18 發送簡訊給我 |
|
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
|
carl168
一般會員 發表:7 回覆:16 積分:4 註冊:2004-02-18 發送簡訊給我 |
|
shieh2700
高階會員 發表:0 回覆:127 積分:100 註冊:2002-06-13 發送簡訊給我 |
[code c#] [StructLayout(LayoutKind.Sequential)] public struct Rec1 { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string Name; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string Address; public int Age; public DateTime Birth; }; public static class RawData { public static byte[] Serialize(object obj) { int rawSize = Marshal.SizeOf(obj); IntPtr buffer = Marshal.AllocHGlobal(rawSize); Marshal.StructureToPtr(obj, buffer, true); byte[] result = new byte[rawSize]; Marshal.Copy(buffer, result, 0, rawSize); Marshal.FreeHGlobal(buffer); return result; } public static T Deserialize { Type t = typeof(T); int rawSize = Marshal.SizeOf(t); IntPtr buffer = Marshal.AllocHGlobal(rawSize); Marshal.Copy(rawData, 0, buffer, rawSize); object result = Marshal.PtrToStructure(buffer, t); Marshal.FreeHGlobal(buffer); return (T)result; } } [/code] 可參考下列這篇文章: http://huanlin.dyndns.org/cs/blogs/huan-lins_blog/archive/2007/10/30/obfuscator-and-serialization.aspx & http://211.147.225.34/gate/big5/dotnet.chinaitlab.com/CSharp/735779.html |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |