C#基础数据与Byte-创新互联

基础数据与Byte数据的转换在Socket通讯中用的非常的多.我想任何Game都不大会希望直接用XML和Json字符串直接进行数据传递,而是在Client端和Server端对基础数据进行解析.当然,如果你执行用"Encoding.UTF8.GetBytes"之类的话,我也没有办法.C# 基础数据与Byte好了,进入正题:在C#中要进行基础数据和Byte的转换要用到:"BitConverter"类

成都创新互联是一家集网站建设,吉林企业网站建设,吉林品牌网站建设,网站定制,吉林网站建设报价,网络营销,网络优化,吉林网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

这里我用了一个实例:

BitConverToByte : 将基础类型变成Bytes[]

BitBitConverterTest : 将Bytes[]解析成基础类型

另外:简易的模仿一下Socket通讯协议(注意:只是简易,真正用在Socket里面,需要另外加协议号等等):

包头只有一个 int32类型用于包体的length

包体:

    [

        int32 : 内容的长度

        string : 内容

    ]

    int32 , 这里故意加的(免得成光棍内容)( 在实际Socket中 , 你可以表示年龄啥的!!!)

代码如下:

BitConverToByte :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BitBitConverterTest.ainy
{
    /// 
    /// 将内容变成规则的二进制数据,以便发送
    /// 
    public class BitConverToByte
    {
        private readonly string context;
        private readonly Int32 mark;
        public BitConverToByte( string context , Int32 mark )
        {
            this.context = context;
            this.mark = mark;
        }
        /// 
        /// 返回二进制数组
        /// 
        ///  int32长度 + context + mark
        public byte[] GetContextBytes()
        {
            // 内容的二进制
            byte[] myContext = Encoding.UTF8.GetBytes(this.context);
            // 标示的二进制( 测试BitConverter )
            byte[] myMark = BitConverter.GetBytes(this.mark);
            // 关于内容长度 myContext + myMark
            byte[] myBytesLenght = BitConverter.GetBytes(myContext.Length + myMark.Length);
            // 关于内容的长度
            byte[] myContextLength = BitConverter.GetBytes(myContext.Length);
            byte[] reslut = new byte[myContext.Length + myContextLength.Length + myMark.Length + myBytesLenght.Length];
            myBytesLenght.CopyTo(reslut, 0);
            myContextLength.CopyTo(reslut, myBytesLenght.Length);
            myContext.CopyTo(reslut, myBytesLenght.Length + myContextLength.Length);
            myMark.CopyTo(reslut, myBytesLenght.Length + myContext.Length + myContextLength.Length);
            return reslut;
        }
    }
}

BitBitConverterTest :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BitBitConverterTest.ainy
{
    /// 
    /// 将二进制转化为内容
    /// 
    public class BitConverToContext
    {
        //整个二进制数据
        private readonly byte[] target;
        //文本二进制(String)数据
        public string Context { get ; private set; }
        //标记数据
        public Int32 Mark { get; private set; }
        //文本 "I Love U"的二进制数据
        public byte[] ContextBytes { get; private set; }
        public BitConverToContext( byte[] target )
        {
            this.target = target;
            this.AnalysisFromBytes();
        }
        /// 
        /// 解析Byte[]
        /// int + [string的length + string] + int
        /// 
        private void AnalysisFromBytes() {
            // 得到文本的总长度 : ( 文本长度 + Context.Length + Mark.Length )
            Int32 contextLength = BitConverter.ToInt32(this.target, 0);
            // 得到文本的长度
            Int32 len = BitConverter.ToInt32(this.target, 4);
            // 获取文本
            this.Context = BitConverter.ToString(this.target, 8, len);
            // 获取后面的Mark
            this.Mark = BitConverter.ToInt32(this.target, 8 + len);
            this.ContextBytes = this.target.Skip(8).Take(len).ToArray();
        }
    }
}

测试:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BitBitConverterTest.ainy;

namespace BitBitConverterTest
{
    class Program
    {
        static void Main(string[] args)
        {
            BitConverToByte bitConverToByte = new BitConverToByte("I Love U", 1314);
            BitConverToContext bitConverToContext = new BitConverToContext(bitConverToByte.GetContextBytes());
            Console.WriteLine("内容二进制:{0} , 内容:{1} , 标记:{2}", bitConverToContext.Context, Encoding.UTF8.GetString(bitConverToContext.ContextBytes), bitConverToContext.Mark);
            Console.ReadKey();
        }
    }
}

结果:

C# 基础数据与Byte

附件:http://down.51cto.com/data/2367312

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站名称:C#基础数据与Byte-创新互联
本文来源:http://myzitong.com/article/dchcdc.html