主题:字符分段问题
hfgfgdf777
[专家分:0] 发布于 2009-01-08 18:51:00
有字符串为:
a="20 94 7C 90 00 90 00 90 1D 12 E1 12 02 0E 04 00 21 00 21 00 21 00 37 FE A9 40 A2 48 23 48 22 D0 24 60 24 60 28 90 30 88 23 0E 2C 04 20 00 08 00 0F FC 10 00 2F F8 48 08 0F F8 08 08 0F F8 04 00 07 F8 0C 10 12 60 21 80 06 60 18 1E 60 04 00 7C 3F 80 02 20 04 20 08 40 1F 80 03 20 0C 10 3F F8 10 8C 04 A0 08 90 10 88 20 84 42 84 01 00 10 40 10 20 23 FE 20 40 44 40 F8 88 09 04 13 FE A9 40 .. .. .. ..........."
a 长度不定,如何把a分为每8八个为一段。并且每段为一个变量
即
a1="20 94 7C 90 00 90 00 90"
a2="1D 12 E1 12 02 0E 04 00"
a3="21 00 21 00 21 00 37 FE"
..........
an=".. .. .. .. .. .. .. .."
回复列表 (共9个回复)
沙发
一江秋水 [专家分:9680] 发布于 2009-01-09 12:07:00
一个办法如下:
1.定义2个字符串数组,例如B(),C()
2.使用Split函数:B= Split(a, " ")
3.最后用For循环或者Do循环将每8个B数组元素值连接到一起赋给C数组,每连接一个加上一个空格,循环步长为8,例如:
'以下假设数据个数是8的整倍数
dim i as integer,j as integer
redim C(UBound(B)\8-1)
For i=0 to UBound(B) step 8
C(j)=B(i) & B(i+1) & " " & B(i+2) & " " & B(i+3) & " " & B(i+4) & " " & B(i+5) & " " & B(i+6) & " " & B(i+7)
j=j+1
next
板凳
tanchuhan [专家分:15140] 发布于 2009-01-09 17:08:00
楼主考完试了吧?那就不需要解答啦。
3 楼
hfgfgdf777 [专家分:0] 发布于 2009-01-10 18:58:00
再问:如何把
a1="20 94 7C 90 00 90 00 90"
a2="1D 12 E1 12 02 0E 04 00"
a3="21 00 21 00 21 00 37 FE"
..........
an=".. .. .. .. .. .. .. .."
保存为一个十六进制文件?
4 楼
一江秋水 [专家分:9680] 发布于 2009-01-11 11:18:00
转为16进制有2种:
1.把一个数据整个转为16进制,例如把94转为&H5E
2.把一个数据的两位分别转为16进制Ascii码,例如把94转为&H39和&H34
另外,数据之间的空格要不要转
5 楼
hfgfgdf777 [专家分:0] 发布于 2009-01-11 19:01:00
这些本来就是十六进制的数据了,不必再转,我的意思是把这些16进制的数保存为一个16进制的文件,就是打开是乱码的那种
6 楼
hfgfgdf777 [专家分:0] 发布于 2009-01-11 19:05:00
Dim b() As Byte
b() = Split("8B 7E 08 85 FF 74 39 8B CF E8 72 0D 0A 00 57 EB", " ")
Open "c:\1.dat" For Random As 1
Put 1, , b()
Close 1
这是从网上抄来的代码,但我试了不行
7 楼
一江秋水 [专家分:9680] 发布于 2009-01-11 20:16:00
你这是类型不对,这样:
Dim b() As String, c() As Byte
b() = Split("8B 7E 08 85 FF 74 39 8B CF E8 72 0D 0A 00 57 EB", " ")
ReDim c(UBound(b))
For i = 0 To UBound(b): c(i) = Val("&H" & b(i)): Next
Open "d:\1.txt" For Random As 1
Put 1, , c()
Close 1
8 楼
hfgfgdf777 [专家分:0] 发布于 2009-01-11 22:59:00
用你的代码前面多了多了10节,并且分成两行,要在一行才能达到要求
你的代码用UltraEdit打开的结果如下:
O1 00 10 00 00 00 00 00 00 00 8B 7E 08 85 FF 74
39 8B CF E8 72 0D 0A 00 57 EB
用另一代码
a = "8B 7E 08 85 FF 74 39 8B CF E8 72 0D 0A 00 57 EB"
Open "d:\2.txt" For Binary As #1
For i = 1 To Len(a) - 1 Step 3
w% = Val("&H" & Mid(a, i, 3))
Put #1, , w%
Next i
Close #1
也分成了两行,并且每节后面多了个“00”。结果如果下:
8B 00 7E 00 08 00 85 00 FF 00 74 00 39 00 8B 00
CF 00 E8 00 72 00 0D 00 0A 00 00 00 57 00 EB 00
9 楼
一江秋水 [专家分:9680] 发布于 2009-01-12 09:06:00
哦,我是跟着你那段代码写的,应该把Random改为Binary就可以了。
你那个另一代码,程序保存时是作为Unicode码保存的,所以每个数据后面会多个00。
读这个文件时,要用二进制方法读入,你用读字符方式读入的话,0D、0A是回车换行符,所以会分成2行。
我来回复