相关文章推荐
爱玩的小笼包  ·  Uncaught (in promise) ...·  1 月前    · 
调皮的番茄  ·  flowable 报错 Waiting ...·  9 月前    · 
冷静的抽屉  ·  Measuring Local ...·  1 年前    · 
至今单身的杨桃  ·  Java BufferedReader ...·  1 年前    · 

思路:

①负数转换为正数;例:-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;