因为转换后的数组多了一倍的内容,全部都是 0 ,所以用循环语句将没用的 0 去掉就行了。 dim i as long dim db() as byte redim db(ubound(newArray())/2) for i=0 to ubound(newArray())/2 db(i)=newArray(i*2) next i Open "c:\new.zip" For Binary Access Write As # Put #iFileNum, , db() Close #iFileNum
Dim bytArray() As Byte
ReDim bytArray(1 To 4) bytArray(1) = 65 bytArray(2) = 66 bytArray(3) = 129 bytArray(4) = 139 Dim strTemp As String
strTemp = StrConv(bytArray(), vbUnicode) '将二进制转化为string Dim newBytarr() As Byte newBytarr() = StrConv(strTemp, vbFromUnicode) For i = 0 To UBound(newBytarr) MsgBox newBytarr(i) Next i 这里一样循环四次呀 strTemp = StrConv(newBytarr(), vbUnicode) '将二进制转化为string
Dim newArray() As Byte iFileNum = FreeFile newArray= StrConv(strTemp, vbFromUnicode) '将string专为字节数组 Open "c:\new.zip" For Binary Access Write As #iFileNum'读取当前文件为二进制 Put #iFileNum, , newArray() 'bytArray() '得到这个二进制流 在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了 Close #iFileNum这样才对
是可以的。你自己做一个测试好了。 Dim strFile As String Dim iFileNum As Integer Dim bytArray() As Byte '存放字节数据数组 Dim strTemp As String Dim filelength As Long
iFileNum = FreeFile strFile = "d:\new.zip" filelength = FileLen(strFile) Open strFile For Binary Access Read As #iFileNum '读取文件为二进制数据 ReDim bytArray(1 To filelength) '重定义字节数组 Get #iFileNum, , bytArray() '得到这个二进制流 Close #iFileNum strTemp = StrConv(bytArray(), vbUnicode) '将二进制转化为string Dim newArray() As Byte iFileNum = FreeFile newArray() = StrConv(strTemp, vbFromUnicode) '将string专为字节数组 Open "c:\new.zip" For Binary Access Write As #iFileNum '读取当前文件为二进制 Put #iFileNum, , newArray() 'bytArray() '得到这个二进制流 '在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了 Close #iFileNum End SubPrivate Sub Command2_Click() Dim strFile As String Dim iFileNum As Integer Dim bytArray(4) As Byte '存放字节数据数组 Dim strTemp As String Dim filelength As Long ' bytArray(0) = 33 bytArray(1) = 65 bytArray(2) = 66 bytArray(3) = 129 bytArray(4) = 139 iFileNum = FreeFile Open "d:\new.zip" For Binary Access Write As #iFileNum '读取当前文件为二进制 Put #iFileNum, , bytArray() '得到这个二进制流 '在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了 Close #iFileNumEnd Sub 我用command2写了一个二进制的文件,command1读近来,你可以监视一下,是完全正确的
我的测试代码已经放在上面了,你自己新建一个程序然后把我下面的代码粘过去,Private Sub Command1_Click() '读二进制文件 Dim strFile As String Dim iFileNum As Integer Dim bytArray() As Byte '存放字节数据数组 Dim strTemp As String Dim filelength As Long
iFileNum = FreeFile strFile = "d:\new.zip" filelength = FileLen(strFile) Open strFile For Binary Access Read As #iFileNum '读取文件为二进制数据 ReDim bytArray(1 To filelength) '重定义字节数组 Get #iFileNum, , bytArray() '得到这个二进制流 '设断点 Close #iFileNum strTemp = StrConv(bytArray(), vbUnicode) '将二进制转化为string Dim newArray() As Byte iFileNum = FreeFile newArray() = StrConv(strTemp, vbFromUnicode) '将string专为字节数组 '设断点 Open "c:\new.zip" For Binary Access Write As #iFileNum '读取当前文件为二进制 Put #iFileNum, , newArray() 'bytArray() '得到这个二进制流 '在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了 Close #iFileNum End SubPrivate Sub Command2_Click() Dim strFile As String Dim iFileNum As Integer Dim bytArray(4) As Byte '存放字节数据数组 Dim strTemp As String Dim filelength As Long '把数据写入二进制文件 bytArray(0) = 33 bytArray(1) = 65 bytArray(2) = 66 bytArray(3) = 129 bytArray(4) = 139 iFileNum = FreeFile Open "d:\new.zip" For Binary Access Write As #iFileNum '读取当前文件为二进制 Put #iFileNum, , bytArray() '得到这个二进制流 '在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了 Close #iFileNumEnd Sub 在我注设置断点的下面你设上断点,到断点的时候,你看一下数组好了,完全是正确的。所以这两个函数是不会错的,你再仔细检查一下
Dim strFile As String Dim iFileNum As Integer Dim bytArray() As Byte '存放字节数据数组 Dim strTemp As String Dim filelength As Long
Open strFile For Binary Access Read As #iFileNum '读取当前文件为二进制数据 ReDim bytArray(filelength) '重定义字节数组 Get #iFileNum, , bytArray '得到这个二进制流 Close #iFileNum strTemp = StrConv(bytArray, vbUnicode) '将二进制转化为string
Dim newArray() As Byte iFileNum = FreeFile newArray = StrConv(strTemp, vbFromUnicode) '将string专为字节数组 Open "e:\new.rar" For Binary Access Write As #iFileNum '读取当前文件为二进制 Put #iFileNum, , newArray() 'bytArray()得到这个二进制流 Close #iFileNum上面的应该是标准了吧,但不对,得到的new.rar文件比原来的文件略小 当然也解不开了,肯定是 strTemp = StrConv(bytArray, vbUnicode) '将二进制转化为string newArray = StrConv(strTemp, vbFromUnicode) 错了,两个数组不同,通过ubound得到不一样
Dim strFile As String Dim iFileNum As Integer ' Dim bytArray() As Byte Dim bytArray() As String * 1 Dim strTemp As String Dim filelength As Long
iFileNum = FreeFile strFile = "c:\test.zip" filelength = FileLen(strFile) Open strFile For Binary Access Read As #iFileNum ReDim bytArray(1 To filelength) As String * 1 Get #iFileNum, , bytArray() Close #iFileNum Open "c:\new.zip" For Binary Access Write As #iFileNum Put #iFileNum, , bytArray Close #iFileNum
dim i as long
dim db() as byte
redim db(ubound(newArray())/2)
for i=0 to ubound(newArray())/2
db(i)=newArray(i*2)
next i Open "c:\new.zip" For Binary Access Write As #
Put #iFileNum, , db()
Close #iFileNum
ReDim bytArray(1 To 4)
bytArray(1) = 65
bytArray(2) = 66
bytArray(3) = 129
bytArray(4) = 139
Dim strTemp As String
strTemp = StrConv(bytArray(), vbUnicode) '将二进制转化为string
Dim newBytarr() As Byte
newBytarr() = StrConv(strTemp, vbFromUnicode)
For i = 0 To UBound(newBytarr)
MsgBox newBytarr(i)
Next i
这里一样循环四次呀
strTemp = StrConv(newBytarr(), vbUnicode) '将二进制转化为string
iFileNum = FreeFile
newArray= StrConv(strTemp, vbFromUnicode) '将string专为字节数组
Open "c:\new.zip" For Binary Access Write As #iFileNum'读取当前文件为二进制
Put #iFileNum, , newArray() 'bytArray() '得到这个二进制流
在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了
Close #iFileNum这样才对
newzip() = StrConv(strTemp, vbFromUnicode) '将string专为字节数组
这句话中应该newarray才对,不知道是不是你笔误
还有的就是,我刚才做了个测试是可以的。所以我又看了一下你的代码,可能是你的bytarray是(1 to n)的,而你定义的newarray是0开始的,所以你的newarray是0,多出了一个数
ReDim bytArray(1 To filelength) '重定义字节数组
我该成了 ReDim bytArray(filelength) '重定义字节数组
好像还不行吗
所以转换了一下
Dim strFile As String
Dim iFileNum As Integer
Dim bytArray() As Byte '存放字节数据数组
Dim strTemp As String
Dim filelength As Long
iFileNum = FreeFile
strFile = "d:\new.zip"
filelength = FileLen(strFile)
Open strFile For Binary Access Read As #iFileNum '读取文件为二进制数据
ReDim bytArray(1 To filelength) '重定义字节数组
Get #iFileNum, , bytArray() '得到这个二进制流
Close #iFileNum
strTemp = StrConv(bytArray(), vbUnicode) '将二进制转化为string Dim newArray() As Byte
iFileNum = FreeFile
newArray() = StrConv(strTemp, vbFromUnicode) '将string专为字节数组
Open "c:\new.zip" For Binary Access Write As #iFileNum '读取当前文件为二进制
Put #iFileNum, , newArray() 'bytArray() '得到这个二进制流
'在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了
Close #iFileNum
End SubPrivate Sub Command2_Click()
Dim strFile As String
Dim iFileNum As Integer
Dim bytArray(4) As Byte '存放字节数据数组
Dim strTemp As String
Dim filelength As Long
' bytArray(0) = 33
bytArray(1) = 65
bytArray(2) = 66
bytArray(3) = 129
bytArray(4) = 139 iFileNum = FreeFile
Open "d:\new.zip" For Binary Access Write As #iFileNum '读取当前文件为二进制
Put #iFileNum, , bytArray() '得到这个二进制流
'在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了
Close #iFileNumEnd Sub
我用command2写了一个二进制的文件,command1读近来,你可以监视一下,是完全正确的
newzip改为newarray就对了,你检查你的程序,你一直没有给newarray赋值
newArray() = StrConv(strTemp, vbFromUnicode) '将string专为字节数组没有问题!放心用吧!
我该成了 ReDim bytArray(filelength) '重定义字节数组
还不行?要不把你的发给我看看,我有qq7766284,或者[email protected]
谢谢
'读二进制文件
Dim strFile As String
Dim iFileNum As Integer
Dim bytArray() As Byte '存放字节数据数组
Dim strTemp As String
Dim filelength As Long
iFileNum = FreeFile
strFile = "d:\new.zip"
filelength = FileLen(strFile)
Open strFile For Binary Access Read As #iFileNum '读取文件为二进制数据
ReDim bytArray(1 To filelength) '重定义字节数组
Get #iFileNum, , bytArray() '得到这个二进制流
'设断点
Close #iFileNum
strTemp = StrConv(bytArray(), vbUnicode) '将二进制转化为string Dim newArray() As Byte
iFileNum = FreeFile
newArray() = StrConv(strTemp, vbFromUnicode) '将string专为字节数组
'设断点
Open "c:\new.zip" For Binary Access Write As #iFileNum '读取当前文件为二进制
Put #iFileNum, , newArray() 'bytArray() '得到这个二进制流
'在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了
Close #iFileNum
End SubPrivate Sub Command2_Click()
Dim strFile As String
Dim iFileNum As Integer
Dim bytArray(4) As Byte '存放字节数据数组
Dim strTemp As String
Dim filelength As Long
'把数据写入二进制文件
bytArray(0) = 33
bytArray(1) = 65
bytArray(2) = 66
bytArray(3) = 129
bytArray(4) = 139 iFileNum = FreeFile
Open "d:\new.zip" For Binary Access Write As #iFileNum '读取当前文件为二进制
Put #iFileNum, , bytArray() '得到这个二进制流
'在这里如果是用bytArray()得到的文件就是正确的,所以肯定是那个newArray()错了
Close #iFileNumEnd Sub
在我注设置断点的下面你设上断点,到断点的时候,你看一下数组好了,完全是正确的。所以这两个函数是不会错的,你再仔细检查一下
Dim iFileNum As Integer
Dim bytArray() As Byte '存放字节数据数组
Dim strTemp As String
Dim filelength As Long
iFileNum = FreeFile
strFile = "e:\sendmail.rar"
filelength = FileLen(strFile)
Open strFile For Binary Access Read As #iFileNum
'读取当前文件为二进制数据
ReDim bytArray(filelength) '重定义字节数组
Get #iFileNum, , bytArray '得到这个二进制流
Close #iFileNum
strTemp = StrConv(bytArray, vbUnicode) '将二进制转化为string
Dim newArray() As Byte
iFileNum = FreeFile
newArray = StrConv(strTemp, vbFromUnicode) '将string专为字节数组
Open "e:\new.rar" For Binary Access Write As #iFileNum
'读取当前文件为二进制
Put #iFileNum, , newArray() 'bytArray()得到这个二进制流
Close #iFileNum上面的应该是标准了吧,但不对,得到的new.rar文件比原来的文件略小
当然也解不开了,肯定是
strTemp = StrConv(bytArray, vbUnicode) '将二进制转化为string
newArray = StrConv(strTemp, vbFromUnicode)
错了,两个数组不同,通过ubound得到不一样
Dim iFileNum As Integer
' Dim bytArray() As Byte
Dim bytArray() As String * 1
Dim strTemp As String
Dim filelength As Long
iFileNum = FreeFile
strFile = "c:\test.zip"
filelength = FileLen(strFile)
Open strFile For Binary Access Read As #iFileNum
ReDim bytArray(1 To filelength) As String * 1
Get #iFileNum, , bytArray()
Close #iFileNum Open "c:\new.zip" For Binary Access Write As #iFileNum
Put #iFileNum, , bytArray
Close #iFileNum
[email protected]
你好
'我的想法是这样的,我是想实现文件上传的功能,我不想用ftp,不想用sockt遍程,那只有通过inet发送请求到服务器的cgi程序,但数据发送的格式是name=11&filedate=jkjojjljkljk,所以我把一个zip文件以二进制方式读出,然后放到byte()数组里,在客户端变为 string这样就符合上面的数据发送的格式了,然后发送到cgi,cgi得到这个string后,就把他变为Byte()数组,在把它生成一个zip文件.
那既然这种发式不行的话,那该如何呀呢
不是压缩的问题,我试了一下.dat,.gif都不行,但好像一些文本文件就可以.另外,你说的其他是什么方法呀
http://expert.csdn.net/Expert/topic/1356/1356682.xml
[email protected]
我也是对vb得二进制操作不是很满意