如何在VBA中将简单字符串转换为字节数组?

时间:2009-06-15 22:26:01

标签: excel-vba string bytearray vba excel

我需要使用excel VBA在Byte数组中转换一个简单的字符串。然后这个字节数组用作请求的主体。

我该怎么做?

感谢。

3 个答案:

答案 0 :(得分:22)

Matthew回答了如何转换为ANSI,但是如果您希望生成的字节数组仍然代表原始的Unicode字符串,那么您只需直接指定它:

Public Sub Main()
   Dim b() As Byte
   Dim s As String
   s = "Whatever"
   b = s  'Assign Unicode string to bytes.'
   s = b  'Works in reverse, too!'
   Debug.Print s
End Sub

这就是它的全部。最终得到一个16元素的Byte数组,每个连续的对描述一个Unicode字符。

答案 1 :(得分:8)

如果您只需要ANSI字符,则可以使用StrConv()函数as is done here

答案 2 :(得分:-1)

' a bit of an example
' had some strings down column  G
' nothing in columns "F" or "H"  so that current works
'  Think about it.. there are many many columns
' so leave blank columns on each side of setsof dats
' then currentregion works ... IFF no blank rows in the data
'
' problem to solve  some text  was  Fred3  John2 Blue3
' others were  Bert 3  Green 2 ... which was the require format
'  the ASC char 1 ..255 are the odd or even
'  numbered bytes if array is 1 based or 0 based
'
Private Sub CommandButton1_Click()
    Dim RV$, Ra As Range, Ri&, AL%, WSA() As Byte
    Dim Ci%, WS$, LV As Byte

    Set Ra = Range("g8").CurrentRegion
    For Ri = 1 To Ra.Rows.Count
        WSA = CStr(Ra(Ri, 1).value)
        AL = UBound(WSA)
        LV = WSA(AL - 1)  ' last char byte value
        If LV > 47 And LV < 58 Then    ' 0 to 9
            If WSA(AL - 3) <> 32 Then    ' no space " "
                ReDim Preserve WSA(AL + 2)    ' allow 1 more char
                WSA(AL - 3) = 32    ' put in space
                WSA(AL - 1) = LV    ' return char
                WS = WSA    ' back to a string
                Ra(Ri, 1) = WS  ' back to the cell
            End If
        End If
    Next Ri
End Sub

' of course  the normal VBAcommands  Instr len Mid replace  &
' would do the job ... but my brain is lazy and needed some exercise