• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    [VBS]轉換二進制數據為字符串常用辦法

    發布: 2007-6-30 18:56 | 作者: admin | 來源: | 查看: 25次 | 進入軟件測試論壇討論

    領測軟件測試網 至少有三種以上辦法,可以把二進制數據(比如您從ASP的Request.BinaryRead方法得到的數據)轉換為字符串。

    第一種:使用VBS的MultiByte 方法

    實例:

    Function SimpleBinaryToString(Binary)
    @#SimpleBinaryToString converts binary data (VT_UI1 | VT_ARRAY Or MultiByte string)
    @#to a string (BSTR) using MultiByte VBS functions
    Dim I, S
    For I = 1 To LenB(Binary)
    S = S & Chr(AscB(MidB(Binary, I, 1)))
    Next
    SimpleBinaryToString = S
    End Function

    這個方法非常簡單明了,但是處理大數據流時,比較慢。
    建議只用來處理100KB以下的數據。
    下面的這個類似的方法,性能稍微好些:
    Function BinaryToString(Binary)
    @#Antonin Foller, http://www.pstruh.cz
    @#Optimized version of a simple BinaryToString algorithm.

    Dim cl1, cl2, cl3, pl1, pl2, pl3
    Dim L
    cl1 = 1
    cl2 = 1
    cl3 = 1
    L = LenB(Binary)

    Do While cl1<=L
    pl3 = pl3 & Chr(AscB(MidB(Binary,cl1,1)))
    cl1 = cl1 + 1
    cl3 = cl3 + 1
    If cl3>300 Then
    pl2 = pl2 & pl3
    pl3 = ""
    cl3 = 1
    cl2 = cl2 + 1
    If cl2>200 Then
    pl1 = pl1 & pl2
    pl2 = ""
    cl2 = 1
    End If
    End If
    Loop
    BinaryToString = pl1 & pl2 & pl3
    End Function
    BinaryToString方法比SimpleBinaryToString方法性能高20倍。建議用來處理2MB以下的數據。
    第二種方法:使用ADODB.Recordset
    ADODB.Recordset 可以讓你支持幾乎所有VARIANT支持的數據類型,你可以用它在string和
    binary之間轉換。
    Function RSBinaryToString(xBinary)
    @#Antonin Foller, http://www.pstruh.cz
    @#RSBinaryToString converts binary data (VT_UI1 | VT_ARRAY Or MultiByte string)
    @#to a string (BSTR) using ADO recordset

    Dim Binary
    @#MultiByte data must be converted To VT_UI1 | VT_ARRAY first.
    If vartype(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary

    Dim RS, LBinary
    Const adLongVarChar = 201
    Set RS = CreateObject("ADODB.Recordset")
    LBinary = LenB(Binary)

    If LBinary>0 Then
    RS.Fields.Append "mBinary", adLongVarChar, LBinary
    RS.Open
    RS.AddNew
    RS("mBinary").AppendChunk Binary
    RS.Update
    RSBinaryToString = RS("mBinary")
    Else
    RSBinaryToString = ""
    End If
    End Function
    RSBinaryToString 沒有什么限制--除了物理內存之外。這種處理方式是MultiByte方式的100倍!你可以用它來處理高達100MB的數據! 這種轉換方式,你也可以用來把MultiByte strings轉換為String。下面這個方法把MultiByte strings轉換為Binary:Function MultiByteToBinary(MultiByte)
    @#&copy; 2000 Antonin Foller, http://www.pstruh.cz
    @# MultiByteToBinary converts multibyte string To real binary data (VT_UI1 | VT_ARRAY)
    @# Using recordset
    Dim RS, LMultiByte, Binary
    Const adLongVarBinary = 205
    Set RS = CreateObject("ADODB.Recordset")
    LMultiByte = LenB(MultiByte)
    If LMultiByte>0 Then
    RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
    RS.Open
    RS.AddNew
    RS("mBinary").AppendChunk MultiByte & ChrB(0)
    RS.Update
    Binary = RS("mBinary").GetChunk(LMultiByte)
    End If
    MultiByteToBinary = Binary
    End Function
    第三種:使用ADODB.Stream這種方式是比較常用的:@#Stream_BinaryToString Function
    @#2003 Antonin Foller, http://www.pstruh.cz
    @#Binary - VT_UI1 | VT_ARRAY data To convert To a string
    @#CharSet - charset of the source binary data - default is "us-ascii"
    Function Stream_BinaryToString(Binary, CharSet)
    Const adTypeText = 2
    Const adTypeBinary = 1

    @#Create Stream object
    Dim BinaryStream @#As New Stream
    Set BinaryStream = CreateObject("ADODB.Stream")

    @#Specify stream type - we want To save text/string data.
    BinaryStream.Type = adTypeBinary

    @#Open the stream And write text/string data To the object
    BinaryStream.Open
    BinaryStream.Write Binary


    @#Change stream type To binary
    BinaryStream.Position = 0
    BinaryStream.Type = adTypeText

    @#Specify charset For the source text (unicode) data.
    If Len(CharSet) > 0 Then
    BinaryStream.CharSet = CharSet
    Else
    BinaryStream.CharSet = "us-ascii"
    End If

    @#Open the stream And get binary data from the object
    Stream_BinaryToString = BinaryStream.ReadText
    End Function
    要存儲、獲取二進制數據,從一個本地文件、上傳的二進制數據文件或者ASP中,可以參考:Pure and Huge ASP file upload with progress.。 Tip keywords: Binary, Byte, Array, VT_UI1, VT_ARRAY, BinaryWrite, BinaryRead, ChrB, InstrB, LeftB, MidB, RightB, ASP, VBSCOPYRIGHT AND PERMITTED USE OF http://www.pstruh.cz/tips WEBSITE. The entire contents of PSTRUH Software website consist of copyright material owned by Antonin Foller, PSTRUH Software.

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>