您的位置:首页 > 其它

字节数组与二进制、十六进制相互转换

2012-05-22 10:27 169 查看
常用的一些转换方法,整理如下,在编程中,用得比较多的是十进制跟十六进制,二进制跟八进制用的很少。


namespaceJerry.Framework.Socket.Common
{
publicclassUtility
{
///<summary>
///将指定进制的字符串转换到指定进制的字符串
///</summary>
///<paramname="value">要转换的字符串</param>
///<paramname="fromBase">value中数字的基数,它必须是2、8、10或16。</param>
///<paramname="toBase">value中数字的基数,它必须是2、8、10或16。</param>
///<returns></returns>
publicstaticstringToString(stringvalue,intfromBase,inttoBase)
{
returnConvert.ToString(Convert.ToInt32(value,fromBase),toBase);
}

///<summary>
///将字节数组节转换成指定进制的字符串
///</summary>
///<paramname="byteArray">要转换的字符串</param>
///<paramname="toBase">它必须是2或16</param>
///<returns></returns>
publicstaticstringToString(byte[]byteArray,inttoBase=16)
{
if(byteArray==null||byteArray.Length==0)
returnstring.Empty;

switch(toBase)
{
case2:
returnByteArrayToBinaryString(byteArray);
case16:
returnByteArrayToHexStr(byteArray);
default:
returnstring.Empty;
}
}

///<summary>
///将指定进制的字符串转换成字节数组
///</summary>
///<paramname="value"></param>
///<paramname="fromBase"></param>
///<returns></returns>
publicstaticbyte[]ToByteArray(stringvalue,intfromBase=16)
{
if(string.IsNullOrEmpty(value))
returnnull;
switch(fromBase)
{
case2:
returnBinaryStringToByteArray(value);
case16:
returnHexStrToByteArray(value);
default:
returnnull;
}
}

///<summary>
///字节数组节转换成二进制字符串
///</summary>
///<paramname="b">要转换的字节数组</param>
///<returns></returns>
privatestaticstringByteArrayToBinaryString(byte[]byteArray)
{
intcapacity=byteArray.Length*8;
StringBuildersb=newStringBuilder(capacity);
for(inti=0;i<byteArray.Length;i++)
{
sb.Append(byte2BinString(byteArray[i]));
}
returnsb.ToString();
}

privatestaticstringbyte2BinString(byteb)
{
returnConvert.ToString(b,2).PadLeft(8,'0');
}

///<summary>
///二进制字符串转换成字节数组
///</summary>
///<paramname="binaryString">要转换的字符,如"0000000011111111"</param>
///<returns></returns>
privatestaticbyte[]BinaryStringToByteArray(stringbinaryString)
{
binaryString=binaryString.Replace("","");

if((binaryString.Length%8)!=0)
thrownewArgumentException("二进制字符串长度不对");

byte[]buffer=newbyte[binaryString.Length/8];
for(inti=0;i<buffer.Length;i++)
{
buffer[i]=Convert.ToByte(binaryString.Substring(i*8,8).Trim(),2);
}
returnbuffer;

}

///<summary>
///字节数组转换成十六进制字符串
///</summary>
///<paramname="bytes">要转换的字节数组</param>
///<returns></returns>
privatestaticstringByteArrayToHexStr(byte[]byteArray)
{
intcapacity=byteArray.Length*2;
StringBuildersb=newStringBuilder(capacity);

if(byteArray!=null)
{
for(inti=0;i<byteArray.Length;i++)
{
sb.Append(byteArray[i].ToString("X2"));
}
}
returnsb.ToString();
}

///<summary>
///十六进制字符串转换成字节数组
///</summary>
///<paramname="hexString">要转换的字符串</param>
///<returns></returns>
privatestaticbyte[]HexStrToByteArray(stringhexString)
{
hexString=hexString.Replace("","");
if((hexString.Length%2)!=0)
thrownewArgumentException("十六进制字符串长度不对");
byte[]buffer=newbyte[hexString.Length/2];
for(inti=0;i<buffer.Length;i++)
{
buffer[i]=Convert.ToByte(hexString.Substring(i*2,2).Trim(),0x10);
}
returnbuffer;
}
}
}





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