日期:2014-05-17  浏览次数:20930 次

C#将字符转转换成byte[]数组
先从头开始说需求,客户要求我按16进制发送UDP包。(格式下面有)
 据我所知只能按byte[]数组的形式发,现在的问题是在发送的24个字节中,2~9是根据不同的数据会改变的,这个数据是从SQL数据库去出来的字符串“sanyo010”。 现在需要实现的是,把这段字符串转换成可以发送的byte[]数组(格式请看下面)。
或者,将这样一段我已经转成16进制的字符串"73616E796F303130"转换成byte数组,数组的格式是下面这种的,2~9个字节是需要替换掉的!
{0xFF,0xFD,0x73,0x61,0x6e,0x79,0x6f,0x30,0x32,0x32,0x0B,0x40,0x03,0x00,0x98,0x39,0x00,0x00,0x00,0x00,0x73,0x38,0xFF,0xFF}
红色部分就是我要根据不同的数据发送不同的byte{}数组!

byte[] bb = {0xFF,0xFD,0x73,0x61,0x6e,0x79,0x6f,0x30,0x32,0x32,0x0B,0x40,0x03,0x00,0x98,0x39,0x00,0x00,0x00,0x00,0x73,0x38,0xFF,0xFF};



求大神帮帮忙,快离职了。这是在公司最后的一个问题了!!

------解决方案--------------------
 string str = "sanyo010"; //从数据库里读出来 
 byte[] b = System.Text.Encoding.Default.GetBytes(str);//转成byte数组,如果编码不对,你换其他编码

for(int i=2;i<10;i++)
{
   if(i<b.Length) //如果你保证读出来的字符串长度都是8,这个判断可以去掉
     bb[i+2]=b[i];
}

------解决方案--------------------
1楼的是替换法 如果 替换的内容长度不确定的话 可以参考下这个方式。

            //打印原始值 好对比
            byte[] bb = { 0xFF, 0xFD, 0x73, 0x61, 0x6e, 0x79, 0x6f, 0x30, 0x32, 0x32, 0x0B, 0x40, 0x03, 0x00, 0x98, 0x39, 0x00, 0x00, 0x00, 0x00, 0x73, 0x38, 0xFF, 0xFF };
            foreach (byte b in bb)
            {
                Console.Write(b.ToString("x2").ToUpper() + " ");
            }
            Console.WriteLine();
            //拆分重要数据 封包 前端 和 后端 
            byte[] b1 = { 0xFF, 0xFD };
            byte[] b2 = { 0x0B, 0x40, 0x03, 0x00, 0x98, 0x39, 0x00, 0x00, 0x00, 0x00, 0x73, 0x38, 0xFF, 0xFF };
            //用集合装数组 动态递增
            List<byte> blst=new List<byte>();
            blst.AddRange(b1);
            blst.AddRange(b2);

            //数据库取数据 可动态替换
            string str = "sanyo010"; 
            //转换成Byte数组 内容动态插入
            blst.InsertRange(b1.Length, System.Text.Encoding.Default.GetBytes(str));

            //如果不支持 集合序列化 则可 转换成 byte数组
 &n