日期:2014-05-18  浏览次数:20932 次

16进制转换问题
问题1:
在直角坐标系中有一个坐标X=4200,Y=-8400,现将其转换为十六进制的。其中X、Y各占三个字节。最高位是符号位,0为正,1为负。
如4200的二进制是001000001101000,X是正数,故最高位还是0,用16进制表示就是1068,不足三个字节,前面加0,即为001068
8400的二进制是0010000011010000,Y是负数,故最高位是1, 即为1010000011010000,用16进制表示就是A0D0,不足三个字节,前面加0,即为00 A0D0。

问题2
上个问题的拟问题,有这样的字符串“00106800A0D0”,取出前6个字符串,将其转换成两个坐标,还要根据最高位判断是正还是负。


------解决方案--------------------
改一下...i不可能>short.MaxValue...-_-!

C# code

        public string BTConvert(short i)
        {
            if (i < 0)
            {
                return (short.MaxValue + 1 - i).ToString("X2").PadLeft(6, '0');
            }
            else
            {
                return i.ToString("X2").PadLeft(6, '0');
            }
        }

        public short BTConvert(string s)
        {
            short i = short.Parse(s, System.Globalization.NumberStyles.HexNumber);
            if (i < 0)
            {
                return (short)(short.MaxValue + 1 - i);
            }
            else
            {
                return i;
            }
        }