作者MOONRAKER (㊣无入,故不自得 :()
看板Visual_Basic
标题Re: [.NET] vb2005的问题?
时间Fri Dec 5 17:15:02 2008
※ 引述《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!
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ https://www.youtube.com/user/JamesBondXD▄▄
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.208.50
1F:→ lineage90160:thx 12/05 19:24