需求很簡單,一個文本框,兩個CheckBox,分別為HEX和ASCII。
那么當現在模式是HEX時,輸入文本81 30(注意這是16進制),點擊ASCII碼選項,會自動轉為ASCII碼,但是轉換出來的string只有一個字符,
就是“?”,導致我再轉為HEX時,和原來的81 30不對應了!
對于常規字符,比如hex:31 30,轉為ascii碼為10,互轉都是沒啥問題的。就是出現81這種無法決議的字符,如何處理才能實作剛剛的效果。誰來挑戰一下。
圖片是別人實作的效果。轉為ascii后明顯只有一個問號這一個字符了,但是轉為hex時能順利切換為81 30兩個字符。


自己的代碼:試了很多方法都不行
自己的代碼只會出現?,再轉的話就會變成3F
private void rbnChar_Tx_CheckedChanged(object sender, EventArgs e)
{
String strTemp = String.Empty, strConv = String.Empty;
if (rbnHEX_Tx.Checked)
{
Byte[] byteBuf = System.Text.Encoding.Default.GetBytes(tbxSendData.Text);
if (byteBuf.Length > 0)
{
for (int i = 0; i < byteBuf.Length; i++)
{
strTemp = Convert.ToString(byteBuf[i], 16);
strTemp = strTemp.PadLeft(2, '0'); ;
strConv += strTemp.ToUpper();
strConv += " ";
}
tbxSendData.Text = strConv;
}
}
else
{
if (tbxSendData.Text.Length > 0)
{
strTemp = tbxSendData.Text.Replace(" ", "");
if (strTemp.Length % 2 != 0)//奇數補'0'
{
strTemp = strTemp.Insert(strTemp.Length - 1, "0");
}
//Byte[] byteBuff = strToHexBytes(strTemp);
//strConv = System.Text.Encoding.Default.GetString(byteBuff);
//tbxSendData.Text = strConv;
byte[] buff = new byte[strTemp.Length / 2];
int index = 0;
for (int i = 0; i < strTemp.Length; i += 2)
{
buff[index] = Convert.ToByte(strTemp.Substring(i, 2), 16);
++index;
}
string result = Encoding.Default.GetString(buff);
tbxSendData.Text = result;
}
}
}
uj5u.com熱心網友回復:
81超過ascii的7位了,字串就是會丟失最高位,你不能用字串來保存中間結果,內部用真實的位元組陣列保存吧,hex和ascii只是顯示用的轉載請註明出處,本文鏈接:https://www.uj5u.com/net/62010.html
標籤:C#
上一篇:VS2010無法打開源檔案
