结构体中包含不定长域转换成字节数组的问题(Struct To ByteArray)

ncluj 2004-10-22 01:49:33
大家都知道,结构体(自定义数据类型)如果每个域都是定长域,或者说都是简单数据类型的话,结构体的内部存储是按域的顺序分配字节空间保存的,但是,如果里面包含不定长字符串(引申开来,如果包含对象)的话,结构体里面只保存一个指向该字符串的指针,那么在转换成ByteArray的时候,就不能使用CopyMemory直接处理的,要把变长字符串单独处理。
而这个处理,是要根据结构体的具体结构来处理的,如果在一个有着大量此类数据的情况下,写这种一个一个字节数过去的程序是很繁琐且容易出错的过程,所以,想请教达人给出一个这种通用的函数,来完成此类功能。

Public Type MyStruct
ID As Byte
Name As String * 10
Memo As String
End Type

如果Memo是定长域,例如String * 10 ,那么一个结构体的长度就是21,按顺序排放这三个域
但是Memo使用变长字符串,这个结构体里面第12字节开始就不是Memo的内容了,我需要做一个函数,能够把Memo域的字符串转换成Byte代替他在结构体里面的那个指针。

谢谢大家!
:)
...全文
338 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aohan 2004-10-24
  • 打赏
  • 举报
回复
接分
supergreenbean 2004-10-24
  • 打赏
  • 举报
回复
呵呵,聪明~
northwolves 2004-10-23
  • 打赏
  • 举报
回复
Option Explicit
Private Type MyStruct
ID As Byte
Name As String * 10
Memo As String
End Type
Private Sub Command1_Click()
Dim X(1 To 10) As MyStruct, I As Long
Open "XX.TXT" For Binary As #1
For I = 1 To 10
Get #1, , X(I)

Me.Print X(I).ID; X(I).Name; X(I).Memo; Len(X(I))
Next
Close #1
End Sub

Private Sub Form_Load()
Dim X As MyStruct, I As Long
Open "XX.TXT" For Binary As #1
For I = 1 To 10
X.ID = I
X.Name = Chr(I + 65)
X.Memo = String(10 * I, "X")
Put #1, , X
Next
Close #1
End Sub
jam021 2004-10-23
  • 打赏
  • 举报
回复
关注,帮你顶!

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧