`

数据传输时用到的一些方法

 
阅读更多
        #region 用回车键替换Tab
        private void AccessoryInfo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                if ((this.ActiveControl is TextBox))
                    SendKeys.Send("{TAB}");
                e.Handled = true;
            }
        }
        #endregion

 

 

//字符串右对齐不够2位的用'0'填充
PadLeft(2, '0')

//在类前面加 [Serializable]表示类可以被序列化
 [Serializable]

 

 

       //压缩
     using System.IO.Compression;
        public static void Compress(Stream source, Stream dest, int size)
        {
            source.Position = 0;
            dest.Position = 0;
            using (GZipStream zipStream = new GZipStream(dest, CompressionMode.Compress, true))
            {
                byte[] buf = new byte[size];
                int len;
//把source中的内容读到buf中
                while ((len = source.Read(buf, 0, buf.Length)) > 0)
                {
//把buf中的内容写到zipStream中并压缩
                    zipStream.Write(buf, 0, len);
                }
            }
        }

 

 

        //解压
        public static void Decompress(Stream source, Stream dest, int size)
        {
            source.Position = 0;
            dest.Position = 0;
            using (GZipStream zipStream = new GZipStream(source, CompressionMode.Decompress, true))
            {
                byte[] buf = new byte[size];
                int len;
                while ((len = zipStream.Read(buf, 0, buf.Length)) > 0)
                {
                    dest.Write(buf, 0, len);
                }
            }
        }

 

 

        //把内存流写到文件
        #region WriteToFile
        public static void WriteToFile(MemoryStream mem, string fileName)
        {
            long pos = mem.Position;
            mem.Position = 0;
            using (FileStream file = new FileStream(fileName, FileMode.Create))
            {
                mem.WriteTo(file);
                file.Close();
            }
            mem.Position = pos;
            return;
        }
        #endregion

 

 

        //把字节数组写到文件
        #region WriteToFile
        public static void WriteToFile(byte[] data, string fileName)
        {
            using (FileStream fileStream = new FileStream(fileName, FileMode.Create))
            {
                fileStream.Write(data, 0, data.Length);
                fileStream.Close();
            }
        }
        #endregion

 

 

        //序列化并压缩一个对象
        public static byte[] Pack(object obj)
        {
            byte[] ret;
            BinaryFormatter formatter = new BinaryFormatter();
            using (MemoryStream stream1 = new MemoryStream())
            {
                formatter.Serialize(stream1, obj);
                using (MemoryStream stream2 = new MemoryStream())
                {
                    Compress(stream1, stream2, 4096);
                    ret = stream2.ToArray();
                }
            }
            return ret;
        }

 

 

        //解压缩、反序列化并得到一个对象
        public static object UnPAck(byte[] data)
        {
            object obj;
            using (MemoryStream stream1 = new MemoryStream())
            {
                stream1.Write(data, 0, data.Length);
                using (MemoryStream stream2 = new MemoryStream())
                {
                    Decompress(stream1, stream2, 4096);
                    BinaryFormatter formatter = new BinaryFormatter();
                    stream2.Position = 0;
                    obj = formatter.Deserialize(stream2);
                }

            }
            return obj;
        }

 

 

        //根据指定的开始位置和长度解压和反序列化一个字节数组并返回一个对象
        public static object UnPAck(byte[] data, int offset, int len)
        {
            object obj;
            using (MemoryStream stream1 = new MemoryStream())
            {
                stream1.Write(data, offset, len);
                using (MemoryStream stream2 = new MemoryStream())
                {
                    Decompress(stream1, stream2, 4096);
                    BinaryFormatter formatter = new BinaryFormatter();
                    stream2.Position = 0;  
                    obj = formatter.Deserialize(stream2);
                }

            }
            return obj;
        }

 

 

   //计算字符串的MD5码
        public static string MD5Digest(string str)
        {
            string pwd = "";
            if (str != "")
            {
                MD5 inst = MD5.Create();

                // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
                byte[] s = inst.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));
                // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得

                for (int i = 0; i < s.Length; i++)
                {
                    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符

                    pwd = pwd + s[i].ToString("X2");
                }
            }
            return pwd;
        }

        //X2中的X表示十六进制,2表示每次按2位输出,例如:两个数10和26,正常情况十六进制显示0xA、0x1A,这样看起来不整齐,为了好看,我们可以指定X2,这样显示出来就是:0x0A、0x1A。

 

 

        //计算一字节数组的MD5码
        public static string MD5Digest(byte[] data)
        {
            string pwd = "";
            if (data.Length > 0)
            {
                MD5 inst = MD5.Create();
                byte[] s = inst.ComputeHash(data);
                for (int i = 0; i < s.Length; i++)
                {
                    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符

                    pwd = pwd + s[i].ToString("X2");
                }
            }
            return pwd;
        }

 

 

        //根据指定的开始位置和长度就算以个字节数组的MD5码
        public static string MD5Digest(byte[] data, int offset, int len)
        {
            string pwd = "";
            if (data.Length > 0)
            {
                MD5 inst = MD5.Create();
                byte[] s = inst.ComputeHash(data, offset, len);
                for (int i = 0; i < s.Length; i++)
                {
                    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符

                    pwd = pwd + s[i].ToString("X2");
                }
            }
            return pwd;
        }

  

 

        //对称加密
        public static string EncryptDiy(string a_strString, string a_strKey)
        {
            try
            {
                byte[] keyArr = System.Text.Encoding.UTF8.GetBytes(a_strKey);

                byte key1 = 0;
                for (int i = 0; i < keyArr.Length; i++)
                {
                    key1 = (byte)(key1 ^ (keyArr[i]));
                }

                byte[] valArr = System.Text.Encoding.UTF8.GetBytes(a_strString);
                for (int i = 0; i < valArr.Length; i++)
                {
                    valArr[i] = (byte)((valArr[i]) ^ key1);
                }

                return Convert.ToBase64String(valArr);
            }
            catch
            {
                return "";
            }
        }

 

  

        //对称解密
        public static string DecryptDiy(string a_strString, string a_strKey)
        {
            try
            {
                byte[] keyArr = System.Text.Encoding.UTF8.GetBytes(a_strKey);

                byte key1 = 0;
                for (int i = 0; i < keyArr.Length; i++)
                {
                    key1 = (byte)(key1 ^ (keyArr[i]));
                }

                byte[] valArr = Convert.FromBase64String(a_strString);
                for (int i = 0; i < valArr.Length; i++)
                {
                    valArr[i] = (byte)(key1 ^ (valArr[i]));
                }

                return System.Text.Encoding.UTF8.GetString(valArr);
            }
            catch
            {
                return "";
            }
        }

 

 

        //保留2为小数(四舍五入)
        private int GetIntVal(string str)
        {
            try
            {
                const int digit = 2;
                double value = (double)Convert.ToDecimal(str);
                double vt = Math.Pow(10, digit);
                double vx = value * vt;

                vx += 0.5;
                return (int)Math.Floor(vx);
            }
            catch
            {
                return 0;
            }
        }

 

 

分享到:
评论

相关推荐

    GPS数据传输协议

    GPS数据传输协议 课程设计上用到过

    tcp数据传输效率测试

    客户端和服务端互传数据,测试传输效率,1、使用tcp传输,服务端比较复杂用到了epoll,客户端用select

    基于VB的网络数据传输、聊天室毕业论文

    基于VB的网络数据传输、聊天室毕业论文 基于Visual Basic的网络数据传输,。在本文中简单介绍了网络数据传输的相关协议,如TCP/IP协议和UDP协议;在实现过程中用到的核心控件,如Winsock控件和MSComm控件;介绍了利用...

    基于单片机数据采集及传输系统的研究

    在微机测控系统中, 经常要用到A/D 转换, 常用的方 法是扩展一块或多块A/D 采集卡, 当模拟...一种串行数据采集串行数据传输的方式。经实践调试证 实, 该模块功耗低、采样精度高、可靠性好、接口简便, 有 一定实用价值。

    FIFO数据的传输和发送

    用于数据的传输和发送,用到FIFO的传输

    记录温度变化曲线的android程序,单片机采集到温度信息通过蓝牙传输到手机,用到SQLite储存数据,mpchart描绘曲线,可以用于学习蓝牙传输

    记录温度变化曲线的android程序,单片机采集到温度信息通过蓝牙传输到手机,用到SQLite储存数据,mpchart描绘曲线,可以用于学习蓝牙传输 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,...

    KeilC51程序设计中几种精确延时方法.pdf

    单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。有时还要求有很高的精度,如使用单总线芯片DS18B20时,允许...

    大数据管理:数据集成的技术 方法与最佳实践 完整中文版 清晰版

    本书分为四部分,共22章,高屋建瓴地阐述了在大型组织环境中,不同计算机系统之间传输数据,以及将异构数据进行集成所用到的技巧、技术和最佳实践,内容涵盖数据集成导论、批处理数据集成、实时数据集成和大数据集成...

    基于串口通信的电力故障录波数据传输系统 (2006年)

    介绍了所开发的一种应用于电力系统的故障录波数据传输系统。该系统的通信技术基于串口通信,实现了一种准确有效的串口通信报文,且具有断点续传和与其它进程共享串口资源的功能。介绍了系统的设计方案和所用到的关键...

    基于GPRS的自动气象站数据传输及应用研究

    随着无线通信技术的飞速发展,利用无线通信,解决偏远、无人和不方便铺设通信线缆地带的通信问题,越来越多的被用到各行各业,以解决各种实际需要。本课题就选择了GPRS作为无人职守地区传输气象资料的通信方式.GPRS...

    《计算机网络与通信(第2版)》习题参考答案

    数据通信以数据传输为基础,但又不是单纯的数据传输,它包括数据传输和数据交换,以及在传输前后的数据处理过程。 由于计算机在各个领域中都得到了非常广泛的应用,遥测、遥控、自控、雷达等领域都需要用到数据处理...

    Android Intent传递数据大小限制详解

    在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能...

    用PTR2000实现单片机与PC机之间的无线数据通信

    许多应用领域要用到单片机和机之间的无线数据传输, 本文论述了利用PTR2000实现单片机和PC机之间无线数据传输的原理和方法, 并给出了应用实例。

    python实现udp传输图片功能

    本文实例为大家分享了python实现udp传输...注意传输的数据是二进制流数据,所以要找方法把需要传输的数据编码成二进制码流,传过去之后再解码即可,这里我用到了opencv读取图片成numpy的array格式,然后编码,传输,最

    winsock传输,曲线显示接收端接收到数据

    名字为“使用winsock传输并显示图片的例” 它这个是显示接收到图片,而我的是txt文件。因为有的时候我们会把数据保存在txt文件中。当你想从txt文件中读取这些数据并曲线综合显示的话,可以用一用。这其中用到NTGraph...

    窜口通讯传输文件 和传输字符串

    串口通讯实现的文件传输和字符串传输 经过测试 最大只能传输5M的文件,实现很简单 ,是简单的文件读写没有用到所谓的数据的分包以及数据帧等内容,希望有帮助

    大数据中的数据预处理技术分析.doc

    从整个大数据的处理流程来看,数据预处理技术的水平决定了数据的真实性、 完整性,对后续的数据分析起到十分关键的作用,在预处理环节用到很多的数学方法, 本文接着重点阐述大数据预处理环节的相关数学变换与数学...

    工业数据传输过程中模拟量与开关量的含义分别是什么

    很多人对工业数据传输过程中用到的模拟量和开关量这两个词非常的陌生,不知道是什么意思。单单从字面上看,并不知道他们分别代表什么意思。在工业上经常是需要对这两个数据进行传输的,以便观察采集的数据以及设备...

    在PB中实现ftp传输

    在用PB进行开发时常常需要用到ftp功能,最典型的应用就是将数据窗口中的数据生成txt文件,然后将此数据文件用ftp发送到远程服务器上去。由于pb本身并未提供任何ftp的功能,因此想在pb中进行ftp传输,只能应用pb以外...

    文件快传之基于C++ QT的Windows HTTP 服务器(用到QtWebApp).zip

    文件快传之基于C++ QT的Windows HTTP 服务器(用到QtWebApp,可以与客户端实现数据收发。这个是自定义文件传输软件系统的一部分-电脑的服务器端,可以在局域网内基于HTTP协议,实现电脑,安卓,网页浏览器三端数据...

Global site tag (gtag.js) - Google Analytics