求教,二进制文件读取问题?

南方的他 2006-10-19 11:24:39
请问,有这样一个二进制文件
人名 字符 14 字母,数字的ASCⅡ码值减去32后保存
年龄 双字节数 2
成绩 单字节数 1
如何读取这种格式的文件,怎么转换呢,请指教?
...全文
281 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wucuilan827 2006-11-29
  • 打赏
  • 举报
回复
mark
南方的他 2006-10-20
  • 打赏
  • 举报
回复
问题基本搞定,谢谢各位
Dunzip 2006-10-20
  • 打赏
  • 举报
回复
Private Type TDATA
aName(0 To 13) As Byte
nAge(0 To 1) As Byte
nByt As Byte
End Type

Private Type TDATA
aName(0 To 13) As Byte
nAge As Integer
nByt As Byte
End Type

上面两种定义的长度一样,可以说基本一样。可能是读取方法错误。
无响应 2006-10-20
  • 打赏
  • 举报
回复
学习中!
南方的他 2006-10-20
  • 打赏
  • 举报
回复
呵呵,我只是举个例子罢了,年龄还是不要关注了吧
leongwong 2006-10-20
  • 打赏
  • 举报
回复
关注!
关注楼主的年龄!
一笑拔剑 2006-10-20
  • 打赏
  • 举报
回复
年龄还有不是整数的?
难道你是25.2岁?
pigsanddogs 2006-10-20
  • 打赏
  • 举报
回复
因为integer就是2字节啊。。
年龄不可能不会整数, 所以不讨论。
nage(0 to 1)as byte 也对, 但是不知道你怎么读错了。
南方的他 2006-10-20
  • 打赏
  • 举报
回复
年龄 双字节数 2 ,您定义为integer为什么?
要是年龄不是整型的,可以定义为什么?我定义为 nage(0 to 1) as byte对不对?读出来好象是错的?不知道该怎么读取了?请指教
ZOU_SEAFARER 2006-10-19
  • 打赏
  • 举报
回复
Option Explicit

Private Type TDATA
aName(0 To 13) As Byte
nAge As Integer
nByt As Byte
End Type
Private Sub Command1_Click()
Dim FileNum As Integer
Dim FileName As String
Dim IntLen As Integer
Dim int_Temp As Integer
FileNum = FreeFile

Open FileName For Binary As FileNum
IntLen = LOF(FileNum) \ Len(TDATA)
Dim StuInfo(IntLen - 1) As TDATA
For int_Temp = 0 To IntLen - 1
Get FileNum, int_Temp * Len(TDATA) + 1, StuInfo(int_Temp)
Next
Close FileNum

Dim i As Integer
Dim j As Integer
Dim str_Temp As String
For i = 0 To IntLen - 1
str_Temp = ""
For j = 0 To 13
str_Temp = str_Temp & Chr(StuInfo(i).aName(j) + 32)
Next
MsgBox "Name" & i + 1 & "Is" & str_Temp
Next

End Sub

Hassle 2006-10-19
  • 打赏
  • 举报
回复
Option Explicit

Private Type TDATA
aName(0 To 13) As Byte
nAge As Integer
nByt As Byte
End Type

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)


Private Sub Command1_Click()
Dim FileNum As Integer
Dim FileName As String
Dim aData() As Byte
Dim p As Long
Dim aTData() As TDATA
Dim nCount As Long
Dim s As String

FileNum = FreeFile

Open FileName For Binary As FileNum
ReDim aData(0 To LOF(FileNum) - 1) As Byte
Get FileNum, 1, aData
Close FileNum

nCount = Fix(((UBound(aData) + 1)) / 17)
ReDim aTData(0 To nCount) As TDATA
CopyMemory aTData(0), aData(0), (UBound(aTData) + 1) * 17

s = aTData(1).aName
MsgBox s

Erase aData
Erase aTData
End Sub
南方的他 2006-10-19
  • 打赏
  • 举报
回复
双字节数?单字节数怎么定啊?用byte?
VBToy 2006-10-19
  • 打赏
  • 举报
回复
根据文件的数据结构定义一个自定义类型来读取

7,763

社区成员

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

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