回 帖 发 新 帖 刷新版面

主题:字符分段问题

有字符串为:

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个回复)

沙发

一个办法如下:

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

板凳

楼主考完试了吧?那就不需要解答啦。

3 楼


再问:如何把
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 楼

转为16进制有2种:
1.把一个数据整个转为16进制,例如把94转为&H5E
2.把一个数据的两位分别转为16进制Ascii码,例如把94转为&H39和&H34
另外,数据之间的空格要不要转

5 楼

这些本来就是十六进制的数据了,不必再转,我的意思是把这些16进制的数保存为一个16进制的文件,就是打开是乱码的那种

6 楼

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 楼

你这是类型不对,这样:

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 楼

用你的代码前面多了多了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 楼

哦,我是跟着你那段代码写的,应该把Random改为Binary就可以了。
你那个另一代码,程序保存时是作为Unicode码保存的,所以每个数据后面会多个00。
读这个文件时,要用二进制方法读入,你用读字符方式读入的话,0D、0A是回车换行符,所以会分成2行。

我来回复

您尚未登录,请登录后再回复。点此登录或注册