[转] byte[]数组与十六进制字符串与字符串的互相转换
字符串转换成十六进制字符串方法1:
/**
* 字符串转换成十六进制字符串
*/
public static String str2HexStr(String str) {
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
}
return sb.toString();
}
十六进制字符串转换成为数组方法1:
/**
* 把16进制字符串转换成字节数组
* @param hexString
* @return byte[]
*/
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i < len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
}
return result;
}
private static int toByte(char c) {
byte b = (byte) "0123456789ABCDEF".indexOf(c);
return b;
}
数组转换成十六进制字符串方法1:
/**
* 数组转换成十六进制字符串
* @param byte[]
* @return HexString
*/
public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArray.length);
String sTemp;
for (int i = 0; i < bArray.length; i++) {
sTemp = Integer.toHexString(0xFF & bArray[i]);
if (sTemp.length() < 2)
sb.append(0);
sb.append(sTemp.toUpperCase());
}
return sb.toString();
}
byte[]数组转换成十六进制字符串方法2:
/**
* 数组转成十六进制字符串
* @param byte[]
* @return HexString
*/
public static String toHexString1(byte[] b){
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < b.length; ++i){
buffer.append(toHexString1(b[i]));
}
return buffer.toString();
}
public static String toHexString1(byte b){
String s = Integer.toHexString(b & 0xFF);
if (s.length() == 1){
return "0" + s;
}else{
return s;
}
}
十六进制字符串转换字符串方法1:
/**
* 十六进制字符串转换成字符串
* @param hexString
* @return String
*/
public static String hexStr2Str(String hexStr) {
String str = "0123456789ABCDEF";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 0xff);
}
return new String(bytes);
}
十六进制字符串转换字符串方法2:
/**
* 十六进制字符串转换字符串
* @param HexString
* @return String
*/
public static String toStringHex(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(
i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
}
}
try {
s = new String(baKeyword, "utf-8");// UTF-16le:Not
} catch (Exception e1) {
e1.printStackTrace();
}
return s;
}
===============================
c#中如何将十进制数的字符串转化成十六进制数的字符串
// <summary>
/// 把ã?字Á?符¤?串ä?转Áa换?成¨¦16进?制?
/// </summary>
/// <param name="str"></param>
/// <param name="enc"></param>
/// <returns></returns>
private string StringToHex(string str, Encoding enc)
{
byte[] bytes = enc.GetBytes(str);
string result = string.Empty;
for (int i = 0; i < bytes.Length; i++)
{
result += "%" + Convert.ToString(bytes[i], 16);
}
return result;
}
/// <summary>
/// 把ã?字Á?符¤?串ä?转Áa换?成¨¦16进?制?字Á?节¨²数ºy组Á¨¦
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private byte[] StringToHexbyte(string str)
{
str = str.Replace(" ", "");
if ((str.Length % 2) != 0)
str += "";
byte[] bytes = new byte[str.Length / 2];
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);
}
return bytes;
}
/// <summary>
/// 将?字Á?节¨²数ºy组Á¨¦转Áa换?成¨¦16进?制?字Á?符¤?串ä?
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
private string ByteToHexString(byte[] bytes)
{
string str = string.Empty;
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
str += bytes[i].ToString("X2");
}
}
return str;
}
/// <summary>
/// 将?汉o字Á?转Áa换?成¨¦16进?制?
/// </summary>
/// <param name="str">汉o字Á?</param>
/// <param name="charset">编À¨¤码?:êo如¨?“¡ãUDF-8,ê?gb2312”¡À</param>
/// <param name="fenge">是º?否¤?用®?‘?,ê?’¡¥号?隔?开a</param>
/// <returns></returns>
private string ToHex(string str, string charset, bool fenge)
{
if ((str.Length % 2) != 0) //加¨®一°?个?空?格?字Á?符¤?
str += "";
Encoding enc = Encoding.GetEncoding(charset); //编À¨¤码?类¤¨¤型¨ª
byte[] bytes = enc.GetBytes(str); //转Áa换?成¨¦字Á?节¨²数ºy组Á¨¦
string result = string.Empty;
//逐e一°?转Áa换?
for (int i = 0; i < bytes.Length; i++)
{
result += string.Format("{0:X}", bytes[i]);
//是º?否¤?用®?逗o号?隔?开a
if (fenge && i != bytes.Length - 1)
{
result += string.Format("{0}", ",");
}
}
return result;
}
/// <summary>
/// 把ã?十º?六¢¨´进?制?转Áa换?成¨¦汉o字Á?
/// </summary>
/// <param name="hex"></param>
/// <param name="charset"></param>
/// <returns></returns>
private string HexToString(string hex, string charset)
{
hex = hex.Replace(" ", "");
hex = hex.Replace(",", "");
hex = hex.Replace("\\", "");
hex = hex.Replace("\n", "");
if ((hex.Length %2) != 0)
{
hex += "20"; //加¨®一°?个?空?格?字Á?符¤?
}
byte[] bytes = new byte[hex.Length / 2];
for (int i = 0; i < bytes.Length; i++)
{
//两¢?个?16进?制?的Ì?字Á?符¤?占?一°?个?字Á?节¨²
bytes[i] = byte.Parse(hex.Substring(i * 2, 2),NumberStyles.HexNumber) ;
}
Encoding enc = Encoding.GetEncoding(charset); //指?定¡§编À¨¤码?
return enc.GetString(bytes); //把ã?字Á?节¨²数ºy组Á¨¦转Áa换?成¨¦
}
===============================
string str = "FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16";
(省略去空格算法)去空格得到 string str1= "FEFEFE68AAAAAAAAAAAA681300DF16";
private static byte[] HexToByte(string hexString)//字串符转换成16进制byte[]
{
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}//返回的结果就是16进制的byte[]
浙公网安备 33010602011771号