如果有三个16位的16进制数,怎么把他们三个用异或算法 合并成一个16位的 16进制数?(有点想绕口令了),各位大虾给一个好点的算法呗,谢谢了!!在线等哦~

解决方案 »

  1.   

    每位一个16进制值,一共16位,就象 "15AAEFE150AA139F"这样,转换成64位的ulong刚好合适。示例代码如下,不知是否要这样的结果:
    List<string> hexString = new List<string>()
                            {
                                "15AAEFE150AA139F",
                                "46AAE85150A156AE",
                                "593FA31DC0013AF2"
                            };ulong part = Convert.ToUInt64(hexString[0], 16);for (int i = 1; i < hexString.Count; i++)
        part ^= Convert.ToUInt64(hexString[i], 16);
    string result = part.ToString("X").PadLeft(16,'0');Console.WriteLine(result);
    结果:
    0A3FA4ADC00A7FC3
      

  2.   

    顺便问一下,十六进制能直接转换成二进制吗?就是Convert 这个方法,或许还有别的?
      

  3.   

    16位密码和16位16进制值不是一个概念……如果是任意16个字符组成的密码,要把字符转换为byte或者int进行XOR运算,那不能象我那样干。我之前给的都是揣测着你的意思写的。
      

  4.   

    我觉得你的想法可能是我下面的这种实现:    public class Program
        {
            static void Main(string[] args) {
                short a1 = 0x0001;
                short a2 = 0x0010;
                short a3 = 0x0100;
                short result = (short)((a1 ^ a2)|(a2^a3)|(a1^a3);
                PrintShort(result);
            }        static void PrintShort(short s) {
                Console.WriteLine("0x" + string.Format("{0:X}", s).PadLeft(4, '0'));
            }
        }三个数的异或应该是,三个数同时比较,只有任意两个数的对应位不同,该位结果即为1,只有三个数对应位都相同,该位结果才是0.老毕,你3楼给的方法都不能保证无序性,你那样依次做异或,结果会随着数字的顺序不同而不同,就是同样的三个数顺序变了,结果就变了
      

  5.   

    弱弱的问一句 你最后的part.ToString("X").PadLeft(16,'0'); 中 ("X")和.PadLeft(16,'0')是用来干嘛的?别喷我啊~~~~~~~~~~~~
      

  6.   


    我说的16位进制密码  就是你说那个样子的"AABBBBDD13456789" 这个样子的,还有就是   16进制能直接转换为2进制吗?  还是说16→10→2 这个样子?