1 private void Window_Loaded(object sender, RoutedEventArgs e)
2 {
3 int i = 255;
4 string str1 = Convert.ToString(i, 2); //10->2 11111111 (有符号)
5 string str2 = Convert.ToString(i, 16); //10->16 ff (有符号)
6 string str3 = i.ToString("X2"); //10->16 FF (有符号)
7 string str3_1 = i.ToString("X4"); //10->16 00FF (有符号)
8 string str3_2 = i.ToString("x4"); //10->16 00ffff (有符号)
9 /*x或X 区别在于16进制中A-F字母的大小写
10 X后数字代表长度*/
11
12 string i2 = "11111111";
13 int a = Convert.ToInt32(i2, 2); //2->10 (有符号)
14 string strA = Convert.ToInt32(i2, 2).ToString("X2"); //2->16 (有符号)
15
16 string i3 = "FF";
17 int str4 = Convert.ToInt32(i3, 16); //16->10
18 int str5 = int.Parse(i3, System.Globalization.NumberStyles.HexNumber); //16->10 (有符号)
19 string str6 = Convert.ToString(0xFF, 2); //16->2 (有符号)
20
21 /*
22 * 负数在计算机系统中是以补码形式存储的
23 * 负数的原码和其绝对值的原码是相同的。
24 * 各位按位取反,获得反码,反码加1 则是补码
25 *
26 * 一个字节在只能表示256个数字
27 * 首先定义0在计算机中储存为00000000,
28 * 从00000001到01111111依次表示1到127 10000001到11111111依次表示-127到-1 10000000是-128
29 * -1 原码:00000001 反码 11111110 补码 1111111
30 */
31 }
32
33 /// <summary>
34 /// 负数转十六进制
35 /// </summary>
36 /// <param name="iNumber"></param>
37 /// <returns></returns>
38 public static string NegativeToHexString(int iNumber)
39 {
40 string strResult = string.Empty;
41
42 if (iNumber < 0)
43 {
44 iNumber = -iNumber;
45
46 string strNegate = string.Empty;
47
48 char[] binChar = Convert.ToString(iNumber, 2).PadLeft(8, '0').ToArray();
49
50 foreach (char ch in binChar)
51 {
52 if (Convert.ToInt32(ch) == 48)
53 {
54 strNegate += "1";
55 }
56 else
57 {
58 strNegate += "0";
59 }
60 }
61
62 int iComplement = Convert.ToInt32(strNegate, 2) + 1;
63
64 strResult = Convert.ToString(iComplement, 16).ToUpper();
65 }
66
67 return strResult;
68 }
69
70 /// <summary>
71 /// 十六进制转为负数
72 ///</summary>
73 ///<param name="strNumber"></param>
74 ///<returns></returns>
75 public static int HexStringToNegative(string strNumber)
76 {
77 int iNegate = 0;
78 int iNumber = Convert.ToInt32(strNumber, 16);
79
80 if (iNumber > 127)
81 {
82 int iComplement = iNumber - 1;
83 string strNegate = string.Empty;
84
85 char[] binChar = Convert.ToString(iComplement, 2).PadLeft(8, '0').ToArray();
86
87 foreach (char ch in binChar)
88 {
89 if (Convert.ToInt32(ch) == 48)
90 {
91 strNegate += "1";
92 }
93 else
94 {
95 strNegate += "0";
96 }
97 }
98
99 iNegate = -Convert.ToInt32(strNegate, 2);
100 }
101
102 return iNegate;
103 }