C#中的Byte,String,Int,Hex之間的轉換函數。


 

 

 

/// <summary> Convert a string of hex digits (ex: E4 CA B2) to a byte array. </summary>
/// <param name="s"> The string containing the hex digits (with or without spaces). </param>
/// <returns> Returns an array of bytes. </returns>
public byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
{
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
}

return buffer;
}

/// <summary> Converts an array of bytes into a formatted string of hex digits (ex: E4 CA B2)</summary>
/// <param name="data"> The array of bytes to be translated into a string of hex digits. </param>
/// <returns> Returns a well formatted string of hex digits with spacing. </returns>
public string ByteArrayToHexString(byte[] data)
{
StringBuilder sb = new StringBuilder(data.Length * 3);
foreach (byte b in data)
{
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
}

return sb.ToString().ToUpper();
}

/// <summary>
/// 將一條十六進制字符串轉換為ASCII
/// </summary>
/// <param name="hexstring">一條十六進制字符串</param>
/// <returns>返回一條ASCII碼</returns>
public static string HexStringToASCII(string hexstring)
{
byte[] bt = HexStringToBinary(hexstring);
string lin = "";
for (int i = 0; i < bt.Length; i++)
{
lin = lin + bt[i] + " ";
}


string[] ss = lin.Trim().Split(new char[] { ' ' });
char[] c = new char[ss.Length];
int a;
for (int i = 0; i < c.Length; i++)
{
a = Convert.ToInt32(ss[i]);
c[i] = Convert.ToChar(a);
}

string b = new string(c);
return b;
}


/**/
/// <summary>
/// 16進制字符串轉換為二進制數組
/// </summary>
/// <param name="hexstring">用空格切割字符串</param>
/// <returns>返回一個二進制字符串</returns>
public static byte[] HexStringToBinary(string hexstring)
{

string[] tmpary = hexstring.Trim().Split(' ');
byte[] buff = new byte[tmpary.Length];
for (int i = 0; i < buff.Length; i++)
{
buff[i] = Convert.ToByte(tmpary[i], 16);
}
return buff;
}


/// <summary>
/// 將byte型轉換為字符串
/// </summary>
/// <param name="arrInput">byte型數組</param>
/// <returns>目標字符串</returns>
private string ByteArrayToString(byte[] arrInput)
{
int i;
StringBuilder sOutput = new StringBuilder(arrInput.Length);
for (i = 0; i < arrInput.Length; i++)
{
sOutput.Append(arrInput[i].ToString("X2"));
}
//將此實例的值轉換為System.String
return sOutput.ToString();
}

 

/// <summary>
/// 對接收到的數據進行解包(將接收到的byte型數組解包為Unicode字符串)
/// </summary>
/// <param name="recbytes">byte型數組</param>
/// <returns>Unicode編碼的字符串</returns>
public string disPackage(byte[] recbytes)
{
string temp = "";
foreach (byte b in recbytes)
temp += b.ToString("X2") + " ";//ToString("X2") 為C#中的字符串格式控制符
return temp;
}

/**
* int轉byte[]
* 該方法將一個int類型的數據轉換為byte[]形式,因為int為32bit,而byte為8bit所以在進行類型轉換時,知會獲取低8位,
* 丟棄高24位。通過位移的方式,將32bit的數據轉換成4個8bit的數據。注意 &0xff,在這當中,&0xff簡單理解為一把剪刀,
* 將想要獲取的8位數據截取出來。
* @param i 一個int數字
* @return byte[]
*/
public static byte[] int2ByteArray(int i)
{
byte[] result = new byte[4];
result[0] = (byte)((i >> 24) & 0xFF);
result[1] = (byte)((i >> 16) & 0xFF);
result[2] = (byte)((i >> 8) & 0xFF);
result[3] = (byte)(i & 0xFF);
return result;
}
/**
* byte[]轉int
* 利用int2ByteArray方法,將一個int轉為byte[],但在解析時,需要將數據還原。同樣使用移位的方式,將適當的位數進行還原,
* 0xFF為16進制的數據,所以在其后每加上一位,就相當於二進制加上4位。同時,使用|=號拼接數據,將其還原成最終的int數據
* @param bytes byte類型數組
* @return int數字
*/
public static int bytes2Int(byte[] bytes)
{
int num = bytes[3] & 0xFF;
num |= ((bytes[2] << 8) & 0xFF00);
num |= ((bytes[1] << 16) & 0xFF0000);
num |= ((bytes[0] << 24) & 0xFF0000);
return num;
}

public static string Int2String(int str)
{
string S = Convert.ToString(str);
return S;
}

public static int String2Int(string str)
{
int a;
int.TryParse(str, out a);
int a1 = Convert.ToInt32(str);
return a1;
}


/*將int轉為低字節在后,高字節在前的byte數組
b[0] = 11111111(0xff) & 01100001
b[1] = 11111111(0xff) & 00000000
b[2] = 11111111(0xff) & 00000000
b[3] = 11111111(0xff) & 00000000
*/
public byte[] IntToByteArray2(int value)
{
byte[] src = new byte[4];
src[0] = (byte)((value >> 24) & 0xFF);
src[1] = (byte)((value >> 16) & 0xFF);
src[2] = (byte)((value >> 8) & 0xFF);
src[3] = (byte)(value & 0xFF);
return src;
}
//將高字節在前轉為int,低字節在后的byte數組(與IntToByteArray2想對應)
public int ByteArrayToInt2(byte[] bArr)
{
if (bArr.Length != 4)
{
return -1;
}
return (int)((((bArr[0] & 0xff) << 24)
| ((bArr[1] & 0xff) << 16)
| ((bArr[2] & 0xff) << 8)
| ((bArr[3] & 0xff) << 0)));
}

public static string StringToHexArray(string input)
{
char[] values = input.ToCharArray();
StringBuilder sb = new StringBuilder(input.Length * 3);
foreach (char letter in values)
{
// Get the integral value of the character.
int value = Convert.ToInt32(letter);
// Convert the decimal value to a hexadecimal value in string form.
string hexOutput = String.Format("{0:X}", value);
sb.Append(Convert.ToString(value, 16).PadLeft(2, '0').PadRight(3, ' '));
}

return sb.ToString().ToUpper();

#endregion

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM