设为首页 加入收藏

TOP

C#中结构体定义并转换字节数组(二)
2018-10-23 00:06:02 】 浏览:353
Tags:结构 定义 转换 字节
mary>
        /// 终端编号
        /// </summary>
        public string stationCode;
        /// <summary>
        /// 终端IP
        /// </summary>
        public long terminalIP;
        /// <summary>
        /// 终端端口
        /// </summary>
        public ushort terminalPort;
        /// <summary>
        /// 中心IP
        /// </summary>
        public long serverIP;
        /// <summary>
        /// 测站端口
        /// </summary>
        public ushort serverPort;
        /// <summary>
        /// 磁盘信息数组
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public PackDiskInfo[] diskInfoArray;
    }


    /// <summary>
    /// 磁盘信息
    /// </summary>
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public struct PackDiskInfo
    {
        /// <summary>
        /// 盘符
        /// </summary>
        public char drive;
        /// <summary>
        /// 总空间
        /// </summary>
        public double totalSize;
        /// <summary>
        /// 可用空间
        /// </summary>
        public double usableSize;
    }


 


        上面的代码需要注意的是string类型实际为Char[6]长度的数组,实际使用中只能有效的使用前5个字符,因为char[6]最后一位默认\0;


        三、结构体与字节数组的互转


 


  
        PackTerminalSearch5001 info;
        info.stationCode = "12345";
        info.order = new byte[6] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
        Byte[] recv = StructToBytes(info);


        object obj = BytesToStuct(recv, typeof(PackTerminalSearch5001));
        PackTerminalSearch5001 info5001 = (PackTerminalSearch5001)obj;
        byte[] order =  info5001.order;


 


        //// <summary>
        /// 结构体转byte数组
        /// </summary>
        /// <param name="structObj">要转换的结构体</param>
        /// <returns>转换后的byte数组</returns>
        public static byte[] StructToBytes(object structObj)
        {
            //得到结构体的大小
            int size = Marshal.SizeOf(structObj);
            //创建byte数组
            byte[] bytes = new byte[size];
            //分

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java中Future与FutureTask使用与.. 下一篇Java线程池ThreadPoolExecutor类..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目