→ lineage90160:thx 12/05 19:24
※ 引述《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