`

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

 
阅读更多
        #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;
            }
        }

 

 

分享到:
评论

相关推荐

    VC串口通信、数据传输代码

    在本文中,我们将深入探讨如何使用Visual C++(VC)进行串口通信和多通道数据传输。串口通信是计算机通信技术中一个基础且重要的部分,尤其在嵌入式系统和设备之间进行数据交换时非常常见。通过多通道通信,我们可以...

    DMA_test_DMA数据传输.rar

    - **外围设备接口**:例如USB、PCIe等高速接口,在数据传输时也会用到DMA技术。 ### DMA控制器的实现 1. **硬件实现**:专用的DMA控制器芯片,独立于CPU,负责管理和协调DMA操作。 2. **软件实现**:操作系统内核...

    wifi进行数据传输DEMO.zip

    在IT领域,无线网络技术,特别是Wi-Fi,已经成为日常生活中数据传输的重要手段。"WiFi进行数据传输DEMO.zip"这个压缩包文件很可能是提供了一个演示或实例,用于展示如何通过Wi-Fi实现数据交换。让我们深入探讨一下Wi...

    TCP/UDP 传输数据

    在编程实现TCP和UDP数据传输时,通常会用到socket编程接口。在C++、Java、Python等语言中,都有对应的socket库提供API来创建、绑定、监听、接受连接和发送/接收数据。对于TCP,我们需要创建一个TCP socket,然后调用...

    TCP传输double数据.zip

    在IT行业中,网络通信是至关重要的一个领域,TCP(Transmission Control Protocol)作为传输层协议,为应用程序提供了可靠的、面向连接的数据传输服务。本项目“TCP传输double数据.zip”聚焦于利用TCP协议在客户端和...

    基于TCP/IP数据传输协议

    在IT行业中,TCP/IP数据传输协议是网络通信的基础,它为设备间的可靠数据交换提供了标准。TCP(Transmission Control Protocol)负责确保数据包的正确顺序和完整性,而IP(Internet Protocol)则负责数据包的路由和...

    安卓XMPP聊天通讯Socket相关-Android实现简单的局域网数据传输(基于热点局域网.rar

    在Android平台上实现基于热点局域网的数据传输是一个常见的需求,特别是在多设备互动或者实时通信的应用中。本项目涉及的关键技术是XMPP聊天通讯和Socket编程,这两种技术在移动设备间的实时通信中扮演着核心角色。 ...

    网络游戏-基于优先级和数据使用计划来管理通过网络连接的数据传输.zip

    在网络游戏领域,有效地管理通过网络连接的数据传输是至关重要的,特别是在资源有限且用户对游戏体验有高要求的情况下。本文档“基于优先级和数据使用计划来管理通过网络连接的数据传输”探讨了如何优化这一过程,...

    transferDialog(局域网内的数据传输)

    综上所述,"transferDialog"项目在实现局域网内的数据传输时,需关注网络协议、文件编码、用户交互、安全性、性能优化等多个方面,确保高效、安全且无乱码的文件传输体验。通过深入理解这些知识点,开发者可以构建出...

    OCCI输出口 大数据传输 C++

    标题中的“OCCI输出口 大数据传输 C++”指的是使用C++编程语言,通过Oracle Call Interface (OCCI) 来实现对Oracle数据库的大数据传输。OCCI是Oracle公司提供的一个C++接口,用于访问和操作Oracle数据库,它使得...

    PIC单片机SPI数据传输代码

    标题中的“PIC单片机SPI数据传输代码”指的是在微控制器 PIC 单片机上实现的SPI(Serial Peripheral Interface)通信协议的程序代码。SPI是一种同步串行接口,广泛用于微控制器与各种外设之间进行高速数据传输,如...

    2019年计算机等考三级网络技术辅导:数据传输速率和误码率.pdf

    数据传输速率和误码率是计算机网络中两个关键的性能指标,它们衡量了信息在通信信道中的传输质量和效率。 数据传输速率,也称为比特率,是指每秒钟传输的二进制位数,单位通常为比特每秒(bps)。这个速率反映了...

    android 局域网数据传输(基于热点局域网)

    在Android平台上进行局域网数据传输,特别是在热点局域网环境下,通常会涉及到网络编程的基础知识,特别是Socket通信。Socket是TCP/IP协议族的一部分,它为应用程序提供了低级别的、进程间的数据通信机制,使得两台...

    嵌入式WinCE平台下的频谱数据传输控制

    嵌入式WinCE平台下的频谱数据传输控制涉及到的几个重要知识点包括: 1. 频谱分析仪与频谱数据实时采集系统 频谱分析仪是一种电子测量仪器,用于分析不同频率信号的强度,俗称频域示波器。它在多个领域中都有广泛的...

    单片机-一种无线数据传输方案及实现.zip

    5. **无线传输方案设计**:设计无线数据传输方案时,需要考虑以下几点:(1)选择合适的无线通信标准和技术;(2)确定传输速率、距离和功耗需求;(3)处理信号干扰和噪声;(4)实现数据的安全加密;(5)设计合理的网络拓扑...

    gmii模式下de2的以太网数据传输verilog

    在本项目中,“gmii模式下de2的以太网数据传输verilog”指的是使用Verilog硬件描述语言,在DE2开发板上实现以太网数据传输,特别是在GMII(Gigabit Media Independent Interface)模式下。 1. **GMII模式**: GMII...

    HRD.rar_数据传输_服务器 csharp

    标题中的"HRD.rar_数据传输_服务器 csharp"表明这是一个关于使用C#语言实现的服务器端和客户端数据传输的项目,重点在于红绿灯系统的模拟。在这个项目中,我们可能涉及以下几个重要的IT知识点: 1. **C#编程语言**...

    电子政务-用于经由电线进行高频数据传输的连接器.zip

    在电子政务领域,可能还会用到一些专用的高速接口连接器,如PCI Express(PCIe)和Thunderbolt等,它们提供更高的带宽,满足大数据量的传输需求。 在选择这些连接器时,需要考虑以下关键因素: 1. **兼容性**:...

    Java数据压缩与传输实例

    在网络编程中,通常会用到Socket或者HTTP协议进行数据传输。以下是一个简单的TCP Socket数据传输的Java示例: ```java import java.io.*; import java.net.*; public class SocketExample { public static void ...

    windows x64 下 的 libcurl库 和 openssl库 用于https数据传输

    在Windows x64环境下,开发涉及HTTPS数据传输的软件时,常常需要用到libcurl库和openssl库。libcurl是一个强大的客户端URL传输库,支持多种网络协议,包括HTTPS;而openssl则是一个开源的加密库,提供了SSL/TLS协议...

Global site tag (gtag.js) - Google Analytics