比如有一个结构体
type g_g
ID_G as long
Name_G as string
end typesub form1_load
dim AA as g_g
AA.ID_G = 1
AA.Name_G = "GO"
dim BB as strimg '这里想把AA以二进制保存到BBdim CC as g_g'之后把BB以还原到CC
'CC.ID_G 的值为 1 CC.Name_G 的值为"GO"
'具体什么实现?????????????end sub
type g_g
ID_G as long
Name_G as string
end typesub form1_load
dim AA as g_g
AA.ID_G = 1
AA.Name_G = "GO"
dim BB as strimg '这里想把AA以二进制保存到BBdim CC as g_g'之后把BB以还原到CC
'CC.ID_G 的值为 1 CC.Name_G 的值为"GO"
'具体什么实现?????????????end sub
Option ExplicitPrivate Type g_g
ID_G As Long
Name_G As String
End TypePrivate Sub Command1_Click()
Dim AA As g_g
AA.ID_G = 1
AA.Name_G = "GO"
Dim BB As String
'这里想把AA以二进制保存到BB
Dim i&, t&
t = Len(AA.Name_G)
BB = Space$(t + 4)
Mid$(BB, 5, t) = AA.Name_G
t = AA.ID_G
For i = 1 To 4
Mid$(BB, i, 1) = Chr$(t And 255)
t = t \ 256
Next'之后把BB以还原到CC
Dim CC As g_g
'CC.ID_G 的值为 1 CC.Name_G 的值为"GO"
'具体什么实现?????????????
t = 0
For i = 4 To 1 Step -1
t = t * 256 Or Asc(Mid$(BB, i, 1))
Next
CC.ID_G = t
CC.Name_G = Mid$(BB, 5)
Debug.Print CC.ID_G
Debug.Print CC.Name_GEnd Sub
先把AA.ID_G = 1 换算成二进制,然后加个'.'然后把AA.Name_G = "GO"分为asc('G')和asc('O'),中间用','然后用函数转换为二进制存放起来
后来在读取出来按照顺序转换回来就行啦.
函数:
Private Function TenturnTwo(ByVal varNum As Long)
Dim returnString As String, ModNum As Integer
Do While varNum > 0
ModNum = varNum Mod 2
varNum = varNum \ 2
returnString = Trim(Str(ModNum)) + returnString
Loop
TenturnTwo = returnString
End Function
Private Function TwoturnTen(ByVal varString As String)
Dim SLen As Long, I As Long, returnNum As Long
SLen = Len(varString)
For I = 0 To SLen - 1
returnNum = returnNum + Val(Mid(varString, I + 1, 1)) * (2 ^ (SLen - I - 1))
Next
TwoturnTen = returnNum
End Function
Private Sub Command1_Click()
Print TenturnTwo(10)
Print TwoturnTen("1010")
End Sub
-------------------
具体的你自己写吧...
就好像,文件已打开的前提下
dim PP as string
pp$ = input(4000,#1)
t = t * 256 Or Asc(Mid$(BB, i, 1)) 改成:t = t * 256 Or AscW(Mid$(BB, i, 1))
如果把它‘转换成字符串’保存到磁盘文件中,再以String的形式读取,恐怕非常容易出问题。
如果是用二进制文件格式保存呢?之后用String的形式读取,再以二进制文件格式保存String的形式读取的变量,再用g_g类型 读取这上二进制文件 应该就不会有错了?
ID_G As Long
Name_G As String
End TypePrivate Sub Form_Load()
Dim AA As g_g
AA.ID_G = 1
AA.Name_G = "GO"
Dim BB As String
Dim a(1) As Byte
a(0) = Asc("G")
a(1) = Asc("O")
BB = CStr(a(0)) & "|" & CStr(a(1))
Debug.Print BB
Dim CC As g_g
a1 = Split(BB, "|")
CC.Name_G = Chr(Val(a1(0))) & Chr(Val(a1(1)))
Debug.Print CC.Name_G
End Sub
何况把 Long数据 转 String 类型很容易出问题。
Option ExplicitPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Type g_g
ID_G As Long
Name_G As String * 255
End TypePrivate Sub Form_Load()
Dim AA As g_g
AA.ID_G = 1
AA.Name_G = "GO" '保存AA到BB里
Dim BB As String
BB = String(Len(AA), vbNullChar)
CopyMemory ByVal StrPtr(BB), AA, Len(AA)
'从BB里还原数据到CC
Dim CC As g_g
CopyMemory CC, ByVal StrPtr(BB), Len(CC)
Debug.Print CC.ID_G, RTrim(CC.Name_G)
End Sub
Dim AA As g_g
AA.ID_G = 1
AA.Name_G = "GO"
Dim BB As String
BB = Right$("00000000" & Hex(AA.ID_G), 8) & AA.Name_G
Debug.Print BB
Dim CC As g_g
CC.ID_G = CLng("&H" & Left$(BB, 8))
CC.Name_G = Mid$(BB, 9)
Debug.Print CC.ID_G, CC.Name_G
End Sub
ID_G as long
Name_G as string 'string为不定长,不适合放在结构里
end type
'应改为12楼那样
type g_g
ID_G as long
Name_G as string * 255
end type