看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《lineage90160 ()》之銘言: : 我想把輸入的字元轉換成ascii碼(7->55 A->65 B->66) : EX:7AB 轉成 556566 : 然後用另外一個for迴圈每兩個抓一組換成16進位 : EX:55->37 65->41 ...... 為什麼不一次做完,要分兩次? : 以下是我寫的 但是跑的結果例外 : [從字串 "" 至型別 'Long' 的轉換是無效的。] : Private Sub butTran_Click(ByVal sender As System.Object, ByVal e As : System.EventArgs) Handles butTran.Click : Dim a As Integer : For i As Integer = 1 To Len(txtKr.Text) : a = Asc(Mid(txtKr.Text, i, i)) : Next i (1)都2008年了不要再用 mid,從字串取出一個字元用 txtKr.chars(i) 你看起來也弄錯了 mid() 的參數格式 正確用法是 mid(<字串>,<子字串開頭>,<子字串長度>) (2)也不要再用 len(),用 txtKr.strlen()。 (3).NET的字串跟C string一樣,各字元的位置從 0 起到 strlen()-1。 : For j As Integer = 1 To Len(a) Step 2 : txtKu.Text &= Hex(Mid(a, j, j + 2)) : Next : End Sub (4)你這邊對mid()的誤解跟上面一樣。 (5)VB.NET的datatype沒有VB6那麼簡單了,直接把字串當數字送給函數會出人命。 (6)也不要再用hex了,現在用string.format()就好,詳細用法見以下範例。 你如果需要十進位和十六進位兩筆值,那也是要用再轉換,或者存到陣列就好了 何必存到字串再從字串轉。 下面的範例程式,一次就解決 Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$$%^&*(<>?/.," Dim i As Integer For i = 0 To s.Length() - 1 TB1.Text &= String.Format("{0:X} ", Asc(s.Chars(i))) Next i 都2008年了,工具變了寫法也要變。 不過 asc() 倒是沒有什麼簡單的新寫法,所以就繼續用。   -- BATCH 03 : 買張床 - 切達大俠 - 伐木人之歌 - http://tinyurl.com/3zpyx5 [B4準備中]: 謳歌金錢(7/02) - 單車超人(7/23) - http://tinyurl.com/66v6vq [ 番外篇 ]: 包租婆也有過當羅莉的時候(7/17) - http://tinyurl.com/6j4ale ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 蒙帝派松正體中文計畫 Spam-a-lot and enjoy the pythonesque delight! ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ http://www.youtube.com/user/JamesBondXD▄▄ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.208.50
lineage90160:thx 12/05 19:24