我做了两个程序:
第一个把一个普通文件(不是二进制,是用记事本就能打开的文件,但是里面有许多中文)和一些别的文件加密后保存到另一个二进制文件里;
第二个把加密后的文件边解密边读取信息,并不在硬盘上保存任何临时文件,直接将最原始的那个普通文件中的数据分离到内存中
原来是可以的,但要保存临时文件;现在想改进一下,不保存临时文件了直接读取,其中有几个关键的函数:
LInputQ函数:类似于Line Input #语句,却是从二进制文件中读取一行(以遇到Chr(13)为准);t = &HFF - t Xor Q是解密方法,Q是一个全局Byte变量
Public Function LInputQ(ByVal FileNumber As Integer) As String
Dim t As Byte
Get #FileNumber, , t
t = &HFF - t Xor Q
Do Until t = 13
LInputQ = LInputQ & Chr(t)
Get #FileNumber, , t
t = &HFF - t Xor Q
Loop
Get #FileNumber, , t
End Function
现在,当我用它(LInputQ)去读取英文时,很正常;但是,一旦遇到中文,就出问题了,返回值有问题,就像" "(四个空格)一样。
比如,原始文件内容为一个“不”字(它的Ascii是13,78),在读取时就变成了178,187不知道是怎么回事。
请大家帮忙,以下是第一个程序的关键代码:
(PB是进度条,Wname是是否写入名称(不管是否写入名称都出现以上问题))
Private Sub AppendMix(ByVal OutNumber As Integer, ByVal FileN As String, ByRef PGBR As ProgressBar, Optional Wname As Boolean = True, Optional k As Byte = &H7F)
Dim i As Long, fLen As Long, tmp As Byte, st As String * 64
Open FileN For Binary As #2
If Wname Then
st = Mid(FileN, InStrRev(FileN, "\") + 1) & String(128, " ")
Put #1, , st
End If
fLen = LOF(2)
Put #1, , CByte(Int(fLen / &H1000000))
Put #1, , CByte(Int(fLen / &H10000) Mod &H100)
Put #1, , CByte(Int(fLen / &H100) Mod &H100)
Put #1, , CByte(fLen Mod &H100)
PGBR.Max = fLen
For i = 1 To fLen
Get #2, , tmp
Put #1, , CByte((&HFF - tmp) Xor k)
PGBR.Value = i
Next i
Close #2
End Sub
慕尼黑5688855
翻翻过去那场雪
吃鸡游戏