C# Hex string與ASCII的互相轉換
今天碰到為了減少通訊封包Size,
把ASCII塞在hex string的case,
上網找了一段時間,發現沒有現成的Code,就隨手紀錄下來了。
資料格式
HEX string: 一連串16進位數字組成的字串,兩個數字為一個單位,對應一個ASCII char。
e.g.
“30”(hex string) => 48(dec) => “0”(ASCII)
“464C”(hex string) = > 70 76(dec) => “FL”(ASCII)
轉換函數
1.HexStr2ASCII – 將hex string轉成對應的ASCII string
2.ASCII2HexStr – 前者的反函數
3.ASCII2HexByte – 上面的函數改用bytes回傳(方便通訊界面調用)
C# Code
//輸入2 Bytes Hex型式的字串,回傳ASCII字串
private string HexStr2ASCII(string hex_str) {
string result = "";
string tmp;
for(int i = 0; i < hex_str.Length; i += 2){
tmp = hex_str.Substring(i, 2);
result += Convert.ToChar(Convert.ToUInt32(tmp, 16));
}
return result;
}
//輸入ASCII字串 回傳2 Bytes Hex型式的字串
private string ASCII2HexStr(string str){
string result = "";
for(int i = 0; i < str.Length; i++){
result += Convert.ToInt32(str[i]).ToString("X");
}
return result;
}
//輸入ASCII字串 回傳2 Bytes Hex型式的Bytes array
private byte[] ASCII2HexByte(string str){
List result = new List();
for(int i = 0; i < str.Length; i++){
byte tmp = (byte)str[i];
result.Add(tmp);
}
return result.ToArray();
}
結果驗證
Debug.WriteLine("HexStr2ASCII(\"464C\"): " + HexStr2ASCII("464C"));
Debug.WriteLine("ASCII2HexStr(\"FL\"): " + ASCII2HexStr("FL"));
byte[] hex_bytes = ASCII2HexByte("FL");
string hex_string = "";
foreach(byte b in hex_bytes){
hex_string += "0x" + b.ToString("X") + " ";
}
Debug.WriteLine("ASCII2HexByte(\"FL\"): " + hex_string.TrimEnd());
HexStr2ASCII(“464C”): FL
ASCII2HexStr(“FL”): 464C
ASCII2HexByte(“FL”): 0x46 0x4C
Filed under: C# - @ 2021 年 7 月 27 日 下午 1:50
標籤: C#