16进制转换问题

时间:2020-12-13 11:07:45
问题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个字符串,将其转换成两个坐标,还要根据最高位判断是正还是负。

7 个解决方案

#1


帮帮忙亚

#2


不明白你的意思,
1. 是要求将10进制转换为16进制吗? 负数是否用补码表示?
2.前6个"001068"转成两个坐标? 各取三个转成10进制,还是?

#3


有符号...无符号...而已...


        public string BTConvert(short i)
        {
            if (i > short.MaxValue | 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 | i > short.MaxValue)
            {
                return (short)(short.MaxValue + 1 - i);
            }
            else
            {
                return i;
            }
        }

#4


改一下...i不可能>short.MaxValue...-_-!


        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;
            }
        }

#5


看不懂

#6


问题1:有个错误,如果是-8400米,8400的二进制是“100000 11010000”,不足三字节,补充为“00000000 00100000 11010000”,因为是负数,最高为置1,则变为“10000000 00100000 11010000”,转化为十六进制“8020D0”
有三个小问题:不足三个字节,怎么补充为三字节?
              最高位怎样置1?(因为不是有符号和无符号的问题,比如说高度是以米为单位,最高位就置0,以千米为单位,就置1)
              得到了X坐标的十六机制是001068,Y坐标的十六机制是8020D0,怎么样把它合成“0010688020D0”,是不是需要用到移位运算?

#7


问题2:
“0010688020D0”前三个字节表示X坐标,后三个字节表示Y坐标,是不是把它看作字符串,取出前六个字符,转化为十进制,就作为X坐标,后6个字符转化为十进制,作为Y坐标?

#1


帮帮忙亚

#2


不明白你的意思,
1. 是要求将10进制转换为16进制吗? 负数是否用补码表示?
2.前6个"001068"转成两个坐标? 各取三个转成10进制,还是?

#3


有符号...无符号...而已...


        public string BTConvert(short i)
        {
            if (i > short.MaxValue | 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 | i > short.MaxValue)
            {
                return (short)(short.MaxValue + 1 - i);
            }
            else
            {
                return i;
            }
        }

#4


改一下...i不可能>short.MaxValue...-_-!


        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;
            }
        }

#5


看不懂

#6


问题1:有个错误,如果是-8400米,8400的二进制是“100000 11010000”,不足三字节,补充为“00000000 00100000 11010000”,因为是负数,最高为置1,则变为“10000000 00100000 11010000”,转化为十六进制“8020D0”
有三个小问题:不足三个字节,怎么补充为三字节?
              最高位怎样置1?(因为不是有符号和无符号的问题,比如说高度是以米为单位,最高位就置0,以千米为单位,就置1)
              得到了X坐标的十六机制是001068,Y坐标的十六机制是8020D0,怎么样把它合成“0010688020D0”,是不是需要用到移位运算?

#7


问题2:
“0010688020D0”前三个字节表示X坐标,后三个字节表示Y坐标,是不是把它看作字符串,取出前六个字符,转化为十进制,就作为X坐标,后6个字符转化为十进制,作为Y坐标?