在本文將介紹 如何將A的字元 轉成 ASCII
大概複習一下!
ASCII(美國信息互換標準代碼)是一套電腦編碼系統
與
UNICODE 是萬國碼,使電腦得以呈現世界上數十種文字的系統
再來須注意的是ASCII碼有多種編碼方式 UTF8 表示8bit與
UTF16表示16bit
在 C# 中,所有記憶體內的字串編碼都是 Unicode (UTF-16)
OK觀念清楚後 來開始看如何轉換吧!
首先來個字串A好了
string F="A";
我們的目標是要把A的ASCII碼SHOW出
再來宣告物件 變數Q是Encodeng物件
GetEnocding設定取的Unicode UTF16
Encoding Q= encoding.GetEncoding("Unicode")
用byte[]存取8位元為一個陣列 Q.GeyByte(取F的Unicode-UTF16)
byte[] x=Q.GeyBytes(F);
這邊順便解釋一下 陣列中的數值
注意 我門的容器是Byte[]代表 8bit一個陣列
但是 GetByte是一個UTF16的 16bit
這代表著甚麼事情呢
代表著 byte[]陣列中
A=65 轉二進為 10000010 00000000 前8bit都用不完了
那後面的8bit 00000000 =10進致的0
GetByte取的是16bit
所以 byte[]陣列中
後面8bit 將等於0
X[0]= 65 X[1]=0
再來只需要把 陣列 show出 即可
來看一下程式碼如下
private void button1_Click(object sender, EventArgs e)
{
string r = "z";
//在 C# 中,所有記憶體內的字串編碼都是 Unicode(UTF-16)16bit。
//當您將資料從儲存區帶入 string 物件時,資料會自動轉換成 UTF-16
Encoding Q = Encoding.GetEncoding("UTF-16");//設定取UTF16
byte[] p = Q.GetBytes(r);//Q取r字串中的UTF16以每8bit放進byte[]陣列
string f = p[0].ToString();//p[0]=122再轉成字串輸出
}
再來我們看更進階的寫法 在書看到的
類是匿名方式 剛接觸有點混亂 所以紀錄一下
來看一下 Encoding 的合併宣告+判斷
首先來個題目
String A="zA" //等等要解析z與A
//先來個位元組容器 並在W後面直接建立物件
byte[] W = Encoding.GetEncoding("Unicode").GetBytes(A);
//再來做輸出動作 並指定陣列W[0] 代表z
MessageBox.Show(W[0].ToString());
再來另一個做法
以字串當容器 缺點是會長一點
不同的是 要在GetBytes中建立char 並指定A字串中哪一個字[0]=z [1]=A
之後再以位元組的角度去思考[0] 輸入字串
注意 前者陣列是字串 後者 指位元組
string RRT = Encoding.GetEncoding("unicode").GetBytes(new char[] {A[1]})[0].ToString();
之後直接輸出 即可
再來我們看看如何將Unicode轉回字元吧
我們都知道A=65
//先用整數型態存取65
int E=65;
//再來需要char的幫忙 char
//存放不帶正負號的 16 位元 (2 位元組) 字碼指標,範圍從 0 到 65535。
//每一個「字碼指標」或字元碼代表單一 Unicode 字元。
char G=(char)A;
G裡面會存放一個65
如果要存放2個以上呢
只好用陣列了!
char[] yt = { 'H', 'I' };
yt[0]=72 yt[1]=73
現在明白char是存取數值
再來往下探討
int E=65; //設定整數E=65
string y=((char)E).ToString();
MessageBox.Show(y);
用一個字串String 當容器
((char)E)將E轉成char
再將char值轉對等的字串表示
剛好放進string容器中
在show出來65即可轉回 A
明白這原理後 可以來看正是題目了
例題如下
2個BUTTON! 4個textbox
每一組 1個BUTTON 2個Textbox 來做字元與ASCII的轉換
第一組 字元轉ASCII
第二組 ASCII轉字元
第一組程式碼如下
private void btn_ToASCII_Click(object sender, EventArgs e)
{ //你的radioButton
if (txt_char.Text != string.Empty)//如果txt_char不等於空直
{ //注意判斷式中[1]表示位元組指的是 第二位元組
//數字不超過8bit! 所以剩下8bit=0通常是字母
if (Encoding.GetEncoding("unicode").GetBytes(new char[] { txt_char.Text[0] })[1] == 0)
{ //得到字符的ASCII碼值 直接輸出textbox!
txt_ASCII.Text = Encoding.GetEncoding("unicode").GetBytes(txt_char.Text)[0].ToString();
}
else
{
txt_ASCII.Text = string.Empty;//輸入不是字母
MessageBox.Show("請輸入字母!", "提示!");//提示用戶訊息
}
}
}
第二組如下
private void btn_ToChar_Click(object sender, EventArgs e)
{
if (txt_ASCII2.Text != string.Empty)//如果不等於空直 空的
{
int P_int_Num;//定義整型局部變數
//將使用者在textbox輸入的數字轉成 P_int_Num
if (int.TryParse(txt_ASCII2.Text, out P_int_Num))
{
//將P_int_Num int 轉char.Tostring()=A
//在輸出Text屬性
txt_Char2.Text =((char)P_int_Num).ToString();//將ASCII碼轉換為字符
}
else
{ //告訴使用者輸入已超過int整數數值範圍
MessageBox.Show(//如果輸入不符合要求彈出提示框
"請輸入正確ASCII碼值。", "錯誤!");
}
}
}
沒有留言:
張貼留言