比如我有个字符串 string a="abcd5de",刚好是奇数  但是我现在需要的一个方法里 这个字符串必须是偶数
if ((a.Length % 2) != 0) a+= " "; 我是这么想的 但是 貌似 计算的时候 还是当成奇数我的整个方法 如下public byte[] strToHexByte(string hexString)
        {
            hexString = "abcd5de";
            if ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2),16);
            return returnBytes;
        }

解决方案 »

  1.   

    已经是偶数if ((hexString.Length % 2) != 0)
                        hexString += " ";
                    int count = hexString.Length;//8
      

  2.   

    不是长度的问题,是空格在ToByte的时候有问题
      

  3.   


    你要的结果不是returnBytes={0xab, 0xcd, 0x5d, 0x0e}吗?
      

  4.   

    恩是的 ,不过我这个字符串 的 组成形式是  5b{0}{1:X2}5d,占位符0是字符串内容,1是crc16的验校码,在最后一个字符前加0会和验校搞乱吗
      

  5.   

    是string.Format吧?传进strToHexByte方法之后都会是一个确定的字符串,不可能有占位符的了,你试试补0吧,应该没问题的。
    或者你就什么都不补了,最后一位没有的话就只取一位吧,这样public static byte[] strToHexByte(string hexString)
    {
        hexString = "abcd5d0e";
        byte[] returnBytes = new byte[(int)Math.Ceiling(hexString.Length / 2.0)];
        for (int i = 0; i < returnBytes.Length; i++)
            returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, (i * 2 == hexString.Length - 1) ? 1 : 2), 16);
        return returnBytes;
    }但我觉得补0是最好的
      

  6.   

    谢谢哥们耐心回答,我有个问题就是  比如我这个 abcd5de 刚好de是crc16的验校码,那么变成了d0e是不是和原先的意思不同了?
      

  7.   


    呃,那个你就写hexString = "abcd5de"吧。
    看你的代码,是把abcd5de按两位两位转成byte数组,只不过是16进制的写法而已。如果是10进制的,比如1234567,你分离出来12、34、56之后,7和07是一样的。我想表达的只是这个意思。
      

  8.   

    万分感谢,最后一个问题string.Format("{0:X4}{1}{2}", 7 + getLength(content), comm, hexContent);string.Format("{0:X4}{1}{2}", 7 + getLength(content), comm, hexContent);这里的 x4,x2什么意思呢?x是十六机制吧 2,和4什么意思
      

  9.   

    以多少位数字显示。比如string.Format("{0:X2}",14)="0e",string.Format("{0:X4}",14)="000e",