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

问题描述 投票:0回答:3

我需要使用 Excel VBA 将简单字符串转换为字节数组。然后这个字节数组用作请求的主体。

我怎样才能做到这一点?

arrays excel vba string
3个回答
32
投票

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 字符。


8
投票

如果您只需要 ANSI 字符,您可以使用

StrConv()
函数如此处所做的那样(断开的链接)

编辑:损坏的链接包含此代码(取自评论):

dim b() as byte
b = StrConv(myString,vbFromUnicode)

-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
© www.soinside.com 2019 - 2024. All rights reserved.