这个问题不是简单的将字符转16进制,
问题是这样的:
已经得出一个字符串,如"484C27544111030000000000",要将其中的字符4个4个的转为ushort型数组:
{0x484c, 0x2754, 0x4111, 0x0300,0x0000,0x0000}试了很多办法,似乎都难以达到这个效果,比如ushort.Parse,Convert类等.
求高手解答.谢谢

解决方案 »

  1.   


                var str = "484C275441110300000000000";
                var list = new List<ushort>();
                for (var index = 0; index< str.Length - 4 ; index+=4)
                {
                    list.Add(Convert.ToUInt16(str.Substring(index, 4), 16));
                }
                var array = list.ToArray();
      

  2.   


    你试了吗? Convert.ToUInt16(str.Substring(index, 4), 16));就是按16进制,解析字符串
      

  3.   

    是的,我试了,转出来的结果是个数组:{18508,10068,16657,768,0,0}
    我的意思是这个结果不是我想要的,我想要的结果是{0x484c, 0x2754, 0x4111, 0x0300,0x0000,0x0000}这样一个数组,
    这些数据是要通过硬件写入到另一个设备中,格式是固定的.不过还是谢谢你提供给我一种解决问题的方法.我再想想....
      

  4.   

    18508 (10进制) == 0x484c (16进制)
    10068 (10进制) == 0x2754 (16进制)这连个数组{18508,10068,16657,768,0,0}和{0x484c, 0x2754, 0x4111, 0x0300,0x0000,0x0000}对编译器而言,没有区别
    如果还理解不了,就无解了
      

  5.   

    你要在ushort数组里存储为“0xffff”是个不存在的问题,因为不论你怎么写这个ushort,在内存中都是1111111111111111这样的二进制,你说的可能是把ushort数组打印出来,显示为"0xffff"这个样子,那可以通过            ushort x = 257;
                string s = Convert.ToString(x, 16).PadLeft(4, '0');
                string ushrots ="0x" + s.Remove(0, 2) + s.Remove(2, 2);来达成,不过这样做看不出有什么意义啊。
      

  6.   

    如果仅仅是字符串转换为0xffff这样的格式,那就把字符串每隔四位取出来加上"0x"算了,都不需要转换为ushort
      

  7.   

    呵呵.明白了.开始时脑子一片混乱.汗自己一个.呵呵
    谢谢bloodish.谢谢!!
      

  8.   

    另外,还是要谢谢8楼的解答.因为这一串字符串包含的信息比较特殊,最好还是保持16进制的显示方法,你的回答很有意义哦.不过结贴的时间忘记给分了.不好意思.在这里也对lizhibin11表示感谢!