有问题的。
假设 bytArry()  是 65 66 67 'ABC
经过两次转换之后就变成这样了:00 65 00 66 00 67
因为 unicode 每个字占2字节的

解决方案 »

  1.   

    viperstorm(你也真调皮呀) ,如何解决呀
      

  2.   

    因为转换后的数组多了一倍的内容,全部都是 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
      

  3.   

    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
      

  4.   

    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这样才对
      

  5.   

    我知道是用bytArray()就对了,但我是在客户端调用cgi程序,你这个bytArray()数组怎么作为参数提交个cgi程序呀,所以要在中间作个转换,先变为string然后在变为byte(),在写呀
      

  6.   

    首先你上面贴的那段代码有个错误,就是
    newzip() = StrConv(strTemp, vbFromUnicode) '将string专为字节数组
    这句话中应该newarray才对,不知道是不是你笔误
    还有的就是,我刚才做了个测试是可以的。所以我又看了一下你的代码,可能是你的bytarray是(1 to n)的,而你定义的newarray是0开始的,所以你的newarray是0,多出了一个数
      

  7.   

    对newzip() 应该是newarray这个
     ReDim bytArray(1 To filelength)  '重定义字节数组
    我该成了 ReDim bytArray(filelength)  '重定义字节数组
    好像还不行吗
      

  8.   

    qaymuic(qaymuic) 我也想用原来的,但要我是为了把这个strTemp 做为参数去调用cgi程序,然后接收下来,在保存为zip文件,这样就实现了文件上传的功能.
    所以转换了一下
      

  9.   

    是可以的。你自己做一个测试好了。
        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读近来,你可以监视一下,是完全正确的
      

  10.   

    说了好多,你还不明白呀
    newzip改为newarray就对了,你检查你的程序,你一直没有给newarray赋值
      

  11.   

    不会啊,我是从二进制文件里读到bytarray数组里面,然后再放到strtemp里面,然后在从strtemp里面读到newarray,你怎么说我没有给newarray赋值啊。再说不清楚的话,你再把代码贴一下
      

  12.   

    strTemp = StrConv(bytArray(), vbUnicode)   '将二进制转化为string
    newArray() = StrConv(strTemp, vbFromUnicode) '将string专为字节数组没有问题!放心用吧!
      

  13.   

    chenxin790311(逍遥鱼)
    我该成了 ReDim bytArray(filelength)  '重定义字节数组
    还不行?要不把你的发给我看看,我有qq7766284,或者[email protected]
    谢谢
      

  14.   

    我的测试代码已经放在上面了,你自己新建一个程序然后把我下面的代码粘过去,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
    在我注设置断点的下面你设上断点,到断点的时候,你看一下数组好了,完全是正确的。所以这两个函数是不会错的,你再仔细检查一下
      

  15.   

    Dim strFile As String
        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得到不一样
      

  16.   

    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
      

  17.   

    snowring (飘飘然) :你把程序发给我看看,对你的代码,看不明白。
    [email protected]
      

  18.   

    我试了一段时间,是不行。你可能要换一种方法了,rar格式里可能有一些特别的处理,总会丢掉一些值。我再看一下,你为什么不用传数组啊,干吗要传字符串呢
      

  19.   

    chenxin790311(逍遥鱼)
    你好
     '我的想法是这样的,我是想实现文件上传的功能,我不想用ftp,不想用sockt遍程,那只有通过inet发送请求到服务器的cgi程序,但数据发送的格式是name=11&filedate=jkjojjljkljk,所以我把一个zip文件以二进制方式读出,然后放到byte()数组里,在客户端变为 string这样就符合上面的数据发送的格式了,然后发送到cgi,cgi得到这个string后,就把他变为Byte()数组,在把它生成一个zip文件.
    那既然这种发式不行的话,那该如何呀呢
      

  20.   

    好象压缩的就不可以,你是不是可以传不用压缩的文件呢
    不是压缩的问题,我试了一下.dat,.gif都不行,但好像一些文本文件就可以.另外,你说的其他是什么方法呀
      

  21.   

    我用你得到的strtemp用二进制查看和原来的文件做了对比,发现这个字符串把原来的00都变成了20(就是空格),把原来的0d在都变成了0d后面加了0a
      

  22.   

    还是用base64编码再发送比较可靠
    http://expert.csdn.net/Expert/topic/1356/1356682.xml
      

  23.   

    给我也发一个
    [email protected]
    我也是对vb得二进制操作不是很满意