您的位置:首页 > 编程语言 > C#

C# 负数和十六进制(两字节)转换

2011-12-17 22:32 761 查看
思路:

①负数转换为正数;例:-5,先转换成5(0000 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";

}

else

{

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>

privateint 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";

}

else

{

strNegate += "0";

}

}

iNegate = - Convert.ToInt32(strNegate, 2);

}

return iNegate;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: