思路:
①负数转换为正数;例:-5,先转换成5(
0
000 0101
);第一位标识正负
②
先将十进制转换为二进制通过;例:将5转换为二进制,得到结果
0000 0101
③求反码;例:将上面例子求反码,得到结果:
1111 1010(即0变成1,1变0)
④求补码;例:将第四步结果求补码,得到结果:1111 1011(最后一位加1)
⑤转十六进制;
1111 1011转十六进制即得:FB
///
<summary>
///
负数转十六进制
///
</summary>
///
<param name="iNumber"></param>
///
<returns></returns>
private
string
NegativeToHexString(
int
iNumber)
string
strResult =
string
.Empty;
if
(iNumber <
0
)
iNumber = -iNumber;
string
strNegate =
string
.Empty;
char
[] binChar = Convert.ToString(iNumber,
2
).PadLeft(
8
,
'
0
'
).ToArray();
foreach
(
char
ch
in
binChar)
if
(Convert.ToInt32(ch) ==
48
)
strNegate +=
"
1
"
;
strNegate +=
"
0
"
;
int
iComplement = Convert.ToInt32(strNegate,
2
) +
1
;
strResult = Convert.ToString(iComplement,
16
).ToUpper();
return
strResult;
///
<summary>
///
十六进制转为负数
///
</summary>
///
<param name="strNumber"></param>
///
<returns></returns>
private
int
HexStringToNegative(
string
strNumber)
int
iNegate =
0
;
int
iNumber = Convert.ToInt32(strNumber,
16
);
if
(iNumber >
127
)
int
iComplement = iNumber -
1
;
string
strNegate =
string
.Empty;
char
[] binChar = Convert.ToString(iComplement,
2
).PadLeft(
8
,
'
0
'
).ToArray();
foreach
(
char
ch
in
binChar)
if
(Convert.ToInt32(ch) ==
48
)
strNegate +=
"
1
"
;
strNegate +=
"
0
"
;
iNegate = - Convert.ToInt32(strNegate,
2
);
return
iNegate;